1、IMultiLanguage3 或者 IMultiLanguage2

  1.1、怎么判断XML 的编码格式(UTF-8或GB2312等)-CSDN论坛.html(https://bbs.csdn.net/topics/391919768

  1.2、查看当前编码(代码页) - lslsyqyq的专栏 - CSDN博客.html(https://blog.csdn.net/lslsyqyq/article/details/80858048

  1.3、测试代码:(vs08x86)

//#define _UNICODE 1
//#pragma warning(disable:4305 4309)
#pragma warning(disable:4309)//warning C4309: “初始化”: 截断常量值
#pragma comment(lib,"ole32")
#pragma comment(lib,"comsupp")
#include <cstdio>
#include <objbase.h>
#include <comip.h>
#include <mlang.h>
#include <tchar.h> typedef _com_ptr_t<_com_IIID<IMultiLanguage3, &IID_IMultiLanguage3> > IMultiLanguage3Ptr; // https://bbs.csdn.net/topics/391919768
int main()
{
CoInitialize(NULL);
{
IMultiLanguage3Ptr pML(CLSID_CMultiLanguage, NULL, CLSCTX_INPROC);
//char data[] = { 0xD6, 0xD0, 0xCE, 0xC4, 0xB1, 0xE0, 0xC2, 0xEB };
//char data[] = { 0xD7, 0xB4, 0xCC, 0xAC, 0xCD, 0xBC, 0xD4, 0xAA };//, 0x74, 0x65, 0x73, 0x74 };
char data[] = { 0xD7, 0xDD, 0x9C, 0xAB, 0xCD, 0xBB, 0xD4, 0xA9 };
int isize = sizeof(data);
DetectEncodingInfo result[];
int result_count = sizeof(result) / sizeof(result[]);
//HRESULT hr = pML->DetectInputCodepage(MLDETECTCP_NONE, 0, data, &isize, result, &result_count);
HRESULT hr = pML->DetectInputCodepage(MLDETECTCP_NONE, , data, &isize, result, &result_count);
if (!SUCCEEDED(hr))
{
fprintf(stderr, "Failed with 0x%x\n", hr);
CoUninitialize();
return hr;
}
for (int i = ; i < result_count; i++)
{
WCHAR desc[] = {};
pML->GetCodePageDescription(result[i].nCodePage, result[i].nLangID, desc, );
printf("CP:%d (%S)\n", result[i].nCodePage, desc);
}
}
CoUninitialize(); // D7 B4 CC AC CD BC D4 AA
system("pause");
return ;
}

    下面是一个 GBK编码的 中文字符串的 char数组信息:

    char data[] = { 0xD6, 0xD0, 0xCE, 0xC4, 0xB1, 0xE0, 0xC2, 0xEB };// 中文编码
//char data[] = { 0xD7, 0xB4, 0xCC, 0xAC, 0xCD, 0xBC, 0xD4, 0xAA };// 状态图元
//char data[] = { 0xD7, 0xDD, 0xCC, 0xAB, 0xCD, 0xBB, 0xD4, 0xAA };// 纵太突元

  1.4、IMultiLanguage2 interface (Windows) _ Microsoft Docs.html(https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa741001%28v%3dvs.85%29

  1.5、IMultiLanguage2__DetectInputCodepage method (Windows) _ Microsoft Docs.html(https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa740986%28v%3dvs.85%29

    ZC:使用 IMultiLanguage2或IMultiLanguage3的DetectInputCodepage 来分析 "状态图元"、"纵太突元"的字符数组,会分不清是 GB2312和UTF8 也是有原因的,∵ Windows自己就搞不清.. 尝试 打开Win7x64的记事本,输入2个字"状态",然后 CTRL+S保存(默认保存,不手动选择字符编码),然后再打开记事本,发现里面的数据是乱码,然后 再"另存为"  此时看到 Windows自己识别出来的编码是"UTF-8",可见 Windows自己都分不清楚 GBK 和 不规范的UTF8 编码...

2、

3、

4、Java的相关资料:

  4.1、Java读取文件,判断是否UTF-8的解决方案 - 墨的博客 - CSDN博客.html(https://blog.csdn.net/dreamworld204/article/details/79286793

首先,UTF-8的编码方式:

1字节 0xxxxxxx
2字节 110xxxxx 10xxxxxx
3字节 1110xxxx 10xxxxxx 10xxxxxx
4字节 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
5字节 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
6字节 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 实际上都在3字节内,没有遇到4字节以上编码的。根据其编码格式我们就可以文件进行一定的验证了,例如:(ZC:后面是一段代码,这里省略)

  4.2、jchardet

    ZC:前面尝试 C/C++的chardet,感觉 好蛋疼难受... 查了下,发现 jchardet 却是资料颇多 而且已经是别人从python翻译过来弄好的 不需要自己编译什么的 用就行了

    ZC:思路:可以将java的代码 封装成 jar(它的检测结果输出到文件中),然后 C/C++ 使用命令行方式执行这个jar  在命令行中读取到jar写入到了那个文件的文件名(或使用固定路径固定文件名),然后 C/C++再去读取 jar的输出文件  (疑问:C/C++ 使用命令行方式执行这个jar,不会立即返回吧?应该是等jar执行完后再返回吧?)

   ZC:下面 2篇文章还未细看:

    (1)、字符集编码的自动识别jchardet - 云守护的专栏 - CSDN博客.html(https://blog.csdn.net/earbao/article/details/38709701

    (2)、jChardet探测文件字符编码-博客-云栖社区-阿里云.html(https://yq.aliyun.com/articles/59514

      ZC:这里的代码,在检测 D:\DRGIS\BIN\Graphics里面的图形时,若 文件是 UTF-8编码的,则它显示是 ASCII;若文件是 UTF-8 + BOM编码的,则它显示是 UTF8.看起来 不太准...

    (3)、借助JCharDet获取文件字符集 - robin·张 - 博客园.html(https://www.cnblogs.com/amunote/p/4178472.html

      ZC:这个文章里面的代码,在检测 D:\DRGIS\BIN\Graphics里面的图形时 能检测出 UTF-8编码的文件是UTF8编码

     ZC:看来 都是使用的 chardet.jar,编写的代码不一样 效果也是不同的。原始工具一样 使用者 水平很关键

  ZC:我的测试代码 位于:文件编码检测.测试代码 - JavaSkill - 博客园.html(https://www.cnblogs.com/javaskill/p/10015676.html

5、

文件编码检测.ZC一些资料(包含java的)的更多相关文章

  1. 文件编码检测.ZC

    1.今天(20181101) 发现 g文件中的 xml头 和 文件编码不一致,最后发现 貌似是我搞错了,人家的文件 编码方式写的是对的. 我发现的现象是:XML里面写的是"GBK" ...

  2. zip格式文件编码检测

    解压后文件名乱码 由于zip格式文件无编码存储的结构,因此解压时无法知道原先的编码. 当解压zip格式文件时使用的编码和原编码不一致时,就可能会出现解压后文件名乱码问题. 猜测编码 基于上述问题,需要 ...

  3. java实现文件编码监测(转)

    chardet是mozilla自动字符集探测算法代码的java移植.这个算法的最初作者是frank Tang,C++源代码在http://lxr.mozilla.org/mozilla/source/ ...

  4. java实现文件编码监测

    java实现文件编码监测 最近在做一个文档的翻译项目,可文档的编码不知道,听头疼的.尝试了很多方法最后发现JCharDet这个工具可以轻松解决这个问题.于是作此笔记希望日后提醒自己以及帮助又需要的人. ...

  5. Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器

    一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...

  6. Java文件编码自动转换工具类(只改变编码,不会改变文件内容)

    本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. public class Cha ...

  7. 使用java进行文件编码转换

    在开发过程中,可能会遇到文件编码的转换,尽管说开发工具eclipse能够转换编码,可是有的情况却非常不方便.比方,原来文件本身的编码是GBK,如今要转换成UTF-8,假设直接在eclipse中把文件编 ...

  8. java文件传输之文件编码和File类的使用

    ---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...

  9. spring boot 启动类一定要放置到包的根目录下,也就是和所有包含java文件的包在同一级目录。如果不放置在根目录下,将会提示 no mybatis mapper was found

    spring boot 启动类一定要放置到包的根目录下,也就是和所有包含java文件的包在同一级目录.将会将同一目录下的包扫描成bean. 如果不放置在根目录下,将会提示 no mybatis map ...

随机推荐

  1. python学习之旅(五)

    Python基础知识(4):基础数据类型之字符串(Ⅰ) 字符串是 Python 中最常用的数据类型.可以使用引号“ ”来创建字符串,只要为变量分配一个值即可.例如: name=“Alice” 注:字符 ...

  2. H5选择颜色-前端颜色选择器

    开发一年多了,一直用angular2框架,框架虽然能大大减少程序员的工作量,但我还是更喜欢用原生的技术写代码. 原生的就像内功心法,框架是招式,招式虽然实用,但是想成为高手还是得有内功修养. 不多说, ...

  3. shop_z 一套非常适合二次开发的php后台管理系统

    QQ群:247823727 如果你需要定制某些功能开联系群主,价格实惠,后期交接完善,有上手培训 shop_z基础thinkphp5  php7上开发运行,速度杠杠的 地址:https://gitee ...

  4. linux学习:【第3篇】远程连接及软件安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...

  5. RoR - MetaProgramming

    ruby是动态语言,它有动态语言的优势与劣势 动态语言,像python与ruby 你不用提前去定义method - they need to only be "found" whe ...

  6. 学习gstreamer

    1. 对gst 的框架认识. 第一篇文章有结构图说明,清楚易懂:第二篇文章介绍了gst的简单使用 http://www.cnblogs.com/jingzhishen/p/3709639.html h ...

  7. ARGB 颜色取值与透明度对照表

    1.  ARGB 依次代表透明度(alpha).红色(red).绿色(green).蓝色(blue). 2. 透明度分为256阶(0-255),计算机上用16进制表示为(00-ff).透明就是0阶,不 ...

  8. EntityFreamWork 项目总结

    前段时间一直在忙着处理一个B2C的商城项目,未来得整理这次项目的心得,今天偶有空闲便写下这篇文章以记录整个项目的设计及自我总结. 这个项目是我综合传智播客教学基础将传统三层架构与EntityFrame ...

  9. [LeetCode] 系统刷题2_排列组合

    要用到backtracking,是否要跟backtracking放到一起总结? 适用范围: 几乎所有搜索问题 什么时候输出 哪些情况需要跳过 相关题目: [LeetCode] 78. Subsets ...

  10. 20175211 2018-2019-2 《Java程序设计》第四周学习总结

    目录 教材学习内容总结 第五章 子类与继承 教材学习中的问题和解决过程 代码调试中的问题和解决过程 代码托管 上周考试错题总结 其他(感悟.思考等,可选) 学习进度条 参考资料 教材学习内容总结 第五 ...