文件编码检测.ZC一些资料(包含java的)
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的)的更多相关文章
- 文件编码检测.ZC
1.今天(20181101) 发现 g文件中的 xml头 和 文件编码不一致,最后发现 貌似是我搞错了,人家的文件 编码方式写的是对的. 我发现的现象是:XML里面写的是"GBK" ...
- zip格式文件编码检测
解压后文件名乱码 由于zip格式文件无编码存储的结构,因此解压时无法知道原先的编码. 当解压zip格式文件时使用的编码和原编码不一致时,就可能会出现解压后文件名乱码问题. 猜测编码 基于上述问题,需要 ...
- java实现文件编码监测(转)
chardet是mozilla自动字符集探测算法代码的java移植.这个算法的最初作者是frank Tang,C++源代码在http://lxr.mozilla.org/mozilla/source/ ...
- java实现文件编码监测
java实现文件编码监测 最近在做一个文档的翻译项目,可文档的编码不知道,听头疼的.尝试了很多方法最后发现JCharDet这个工具可以轻松解决这个问题.于是作此笔记希望日后提醒自己以及帮助又需要的人. ...
- Python编程笔记(第三篇)【补充】三元运算、文件处理、检测文件编码、递归、斐波那契数列、名称空间、作用域、生成器
一.三元运算 三元运算又称三目运算,是对简单的条件语句的简写,如: 简单条件处理: if 条件成立: val = 1 else: val = 2 改成三元运算 val = 1 if 条件成立 else ...
- Java文件编码自动转换工具类(只改变编码,不会改变文件内容)
本篇随笔主要介绍了一个用java语言写的将一个文件编码转换为另一个编码并不改变文件内容的工具类: 通过读取源文件内容,用URLEncoding重新编码解码的方式实现. public class Cha ...
- 使用java进行文件编码转换
在开发过程中,可能会遇到文件编码的转换,尽管说开发工具eclipse能够转换编码,可是有的情况却非常不方便.比方,原来文件本身的编码是GBK,如今要转换成UTF-8,假设直接在eclipse中把文件编 ...
- java文件传输之文件编码和File类的使用
---恢复内容开始--- 我们知道,在用户端和服务端之间存在一个数据传输的问题,例如下载个电影.上传个照片.发一条讯息.在这里我们 就说一下文件的传输. 1.文件编码 相信大家小时候玩过积木(没玩过也 ...
- spring boot 启动类一定要放置到包的根目录下,也就是和所有包含java文件的包在同一级目录。如果不放置在根目录下,将会提示 no mybatis mapper was found
spring boot 启动类一定要放置到包的根目录下,也就是和所有包含java文件的包在同一级目录.将会将同一目录下的包扫描成bean. 如果不放置在根目录下,将会提示 no mybatis map ...
随机推荐
- C++(+类型加强 +加入面向对象)
1.c++中所有变量可以在使用前定义. ; i< ; i++) { ; j< ; j++) { do_sth; } } 2. c++ 中可以获得 register 变量的地址. regis ...
- ARGB 颜色取值与透明度对照表
1. ARGB 依次代表透明度(alpha).红色(red).绿色(green).蓝色(blue). 2. 透明度分为256阶(0-255),计算机上用16进制表示为(00-ff).透明就是0阶,不 ...
- Centos使用natapp教程
官网:https://natapp.cn/ 首先在Natapp站注册账号 点击注册 登录后,点击左边 购买隧道,免费/付费均可 根据需要选择隧道协议,这里以web演示,购买隧道 在 https://n ...
- python常用函数总结
原文地址https://www.cnblogs.com/nice107/p/8118876.html 我们在学习python的时候,接触最多的往往则是那些函数,对于python函数,在这里为大家总结归 ...
- Substrate 使用
1.安装 首先安装sdk,按官网教程http://www.cydiasubstrate.com/id/73e45fe5-4525-4de7-ac14-6016652cc1b8/ http://asdk ...
- C++内存分区:堆、栈、自由存储区、全局/静态存储区和常量存储区
日志 ...
- java.lang.ClassNotFoundException: com.sun.xml.ws.spi.ProviderImpl解决办法
问题现象: 这种很可能出现在独立一个简单示例项目中可以用,但是在把webService模块加入系统后,报出这类错误. Exception in thread "main" java ...
- Maven 的41种骨架功能介绍(转)
Maven 的41种骨架: ...>mvn archetype:generate 1: internal -> appfuse-basic-jsf (创建一个基于Hibernate,Spr ...
- Excel实现年会座位查询
年终了,各公司都在搞年会或尾牙,大公司的年会参与人数都是成千上万的,每个人都想知道自已的座位,实现的方式有很多,有用公众号查询的,有用网页查询的,今天介绍的是本公司用的Excel的实现方式,如下图. ...
- webservice 开发规范
JAVA中共有三种WebService规范,分别是:JAXM&SAAJ.JAX-WS(JAX-RPC).JAX-RS 下面类分别简要介绍一下这三个规范 1. JAX-WS (Java API ...