如果想区分一个完整的字符串是 GBK 还是 UTF8 其实蛮简单的。虽然做不到 100% 有效,但也比上面的方法强许多。
UTF8 是兼容 ascii 的,所以 0~127 就和 ascii 完全一致了。
gbk 的第一字节是高位为 1 的,第 2 字节可能高位为 0 。这种情况一定是 gbk ,因为 UTF8 对 >127 的编码一定每个字节高位为 1 。
另外,对于中文,UTF8 一定编码成 3 字节。(似乎亚洲文字都是,UTF8 中双字节好象只用于西方字符集)
所以型如 110***** 10****** 的,我们一概看成 gbk/gb2312 编码。这就解决了“位”的问题。
汉字以及汉字标点(包括日文汉字等),在 UTF8 中一定被编码成:1110**** 10****** 10******
连续汉字数量不是 3 的倍数的 gb2312 编码的汉字字符串一定不会被误认为 UTF8 。用了一些gbk 扩展字,或是插入了一些 ascii 符号的字符串也几乎不会被认为是 UTF8 。
一般说来,只要汉字稍微多几个,gbk 串被误认为 UTF8 的可能性极其低。(只需要默认不使用 UTF8 中双字节表示的字符)可能性低,这里还有另外一个原因。UTF8 中汉字编码的第一个字节是 1110**** ,这处于汉字的 gb2312 中二级汉字(不常用汉字,区码从 11011000 开始)的编码空间。一般是一些生僻字才会碰上。
可用如下代码确认是不是汉字
int isChinese(unsigned char bhead, unsigned char btail)
{
int r=0;
int iHead = bhead & 0xff;
int iTail = btail & 0xff;
if ((iHead>=0x81 && iHead<=0xfe &&
(iTail>=0x40 && iTail<=0x7e || iTail>=0x80 && iTail<=0xfe)) ||
(iHead>=0xa1 && iHead<=0xf7 && iTail>=0xa1 && iTail<=0xfe) ||
(iHead>=0xa1 && iHead<=0xf9 &&
(iTail>=0x40 && iTail<=0x7e || iTail>=0xa1 && iTail<=0xfe)))
{
return 1;
}
return 0;
}
[摘自云风的blog]
分享到:
相关推荐
不需要关心接受的字符串编码是UTF_8还是GBK,还是ios-8859-1,自动转换为utf-8编码格式,无需判断字符串原有编码,用法://处理编码String newStr = GetEncode.transcode(oldStr);
C#写的 GBK GB2312 UTF-8转换 功能简单,仅供学习
当时在linux上写的代码,转到window下就全部是,自己写的一个小工具类,可以实现UTF-8与GBK之间相互转码。程序开发完后,指定路径,可以实现将文件的编码装换成自己想要的格式,里面有注释
很多人喜欢用CString 或std:string,但是他们的缺点是不能完成汉字各种类型之间的转换,提供三种类库ascString,ucsString,utfString以及工具utfCount,utf8_ucs2_t,tcf8_ucs4_t类库,用于各种字符串之间的直接转换`...
功能:1.解决PB创建UTF-8文件带BOM问题;...问度娘发现有相同问题,但解决方式是利用新建一个UTF-8的TXT文件后,再进行COPY加内容。感觉这样操作有点复杂。 后通过修改修改顺序,让BLOB提前编码UTF-8,解决了该问题。
Java字符串编码查询及转换,可将常用的一些编码格式转换成utf-8
本文实例讲述了C++实现判断一个字符串是否为UTF8或GBK格式的方法。分享给大家供大家参考,具体如下: 在处理外部数据的时候,很可能因为数据格式不一样而导致乱码,甚至导致某些程序挂掉。鉴于对多数系统来说,使用...
判断字符串编码是utf-8还是gb23121
请使用这款软件,直接将代码转换为UTF-8 注意: 1、xml不需要转换,因为xml默认是utf-8,在你新建的时候已经是正确的格式了 2、图片更不需要转换 3、bin目录,gen目录的直接忽略 4.只需要src目录的代码转换,请确保...
Python 简单使用 pandas 读取excel 的 csv文件处理,支持utf-8和gbk编码自动识别。
linux C/c++ 源代码,将中文字串与UTF-8格式字串相互转化,我在项目中使用的代码,完全可用
此文本文档是UTF-8字符集中汉字编码对照表,可以用于查看某个汉字在UTF-8编码集中的位置。此编码集对照表非官网下载,如需使用,请提前预估风险。另外,此对照表只用于学习研究,如需用到其他地方,后果自负。
GBK与UTF-8的区别 一,从字节上区分 GBK的文字编码是双字节来表示的,即不论中、英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1...
utf-8转换工具是非常好用的一款工具,用于将中文转换成utf-8格式的字符
2.UTF-8 编码是用以解决国际上字符的一种多字节编码,它对英文使用8位(即一个字节),中文使用24位(三个字节)来编码。对于英文字符较多的论坛则用UTF-8 节省空间。另外,如果是外国人访问你的GBK网页,需要下载...
utf-8 ansi 字符互转 工具utf-8 ansi 字符互转 工具
utf-8 unicode gb2312 汉字编码
GB2312编码与utf-8编码的字符串的转换,主要使用windows api函数MultiByteToWideChar和WideCharToMultiByte,代码简洁,经测试可用
文件包含:gbk2utf-8.bat、utf-82gbk.bat、iconv.exe及使用说明.txt四个文件 使用说明:1把要转换的所有.h和.c文件拷入该目录下,双击相应的bat文件即可。 2转换结果会保存在utf-8Res或gbkRes目录下。 3如果转换除...
source insight 3.5 UTF-8中文乱码插件,提示! 我自己用3.5版本亲测有效,4.0版本我未测试过