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. libvirt虚拟库

    转载自:https://www.ibm.com/developerworks/cn/linux/l-libvirt/index.html Libvirt 虚拟化库剖析   讲到向外扩展计算(比如云计算 ...

  2. java框架之SpringBoot(4)-资源映射&thymeleaf

    资源映射 静态资源映射 查看 SpringMVC 的自动配置类,里面有一个配置静态资源映射的方法: @Override public void addResourceHandlers(Resource ...

  3. 六种方式读取properties资源文件

    conf.properties文件内容: reportStationName=xx供电局 JBM=0318 文件路径: 其中xxx为项目名 import java.io.BufferedInputSt ...

  4. 【UML】NO.71.EBook.9.UML.4.002-【PowerDesigner 16 从入门到精通】- RQM

    1.0.0 Summary Tittle:[UML]NO.71.EBook.9.UML.4.002-[PowerDesigner 16 从入门到精通]-  RQM Style:DesignPatter ...

  5. iOS代理模式(delegate)的使用

    前言: 代理模式是iOS中非常重要的一个模式,iOS SDK中的系统控件几乎都用到了代理模式.代理模式用来处理事件监听.参数传递功能. 协议创建(Protocol): 可手打如下代码,或者在代码块里面 ...

  6. PHP环境安全加固

    随着使用 PHP 环境的用户越来越多,相关的安全问题也变得越来越重要.PHP 环境提供的安全模式是一个非常重要的内嵌安全机制,PHP 安全模式能有效控制一些 PHP 环境中的函数(例如system() ...

  7. CSS样式中文字的换行

    在我们做输出时可能会遇到这样一个问题,就是汉字和英文字母相遇,然后自动换行的问题.例如,当我在输出产品标题时,由于产品名称比较长,包括汉字和英文字母,FF下浏览是正常的,而IE下面 英文会出现换行.当 ...

  8. 《linux就该这么学》第二节课,安装红帽7,基础命令至2.3小节的笔记

    笔记 实验环境: 1.安装注意事项:使用VM12版本   安装需要稍后安装系统.   自定义硬件DVD选择镜像位置.   自定义网卡仅主机.   自定义内存:大于等于4G,给予虚拟机2G,大于2G小于 ...

  9. C++内存分区:堆、栈、自由存储区、全局/静态存储区和常量存储区

    日志                                                                                                  ...

  10. UI框架搭建DAY2

    今天的主要任务是完善NormalPanel, 搭建PopupPanel. 在编写PanelManager的过程中,发现了一个bug.昨天把panelPath直接传给了ResourceManager.G ...