精灵采集器
首页
产品功能
购买价格
建站教程
当前位置 :
HTML/JavaScript基础
>
正文
区分包含汉字的字符串是 UTF-8 还是 GBK

如果想区分一个完整的字符串是 GBK 还是 UTF8 其实蛮简单的。 虽然做不到 100% 有效,但也其他的方法使用API调用的算法强许多。

UTF8 是兼容 ascii 的,所以 0~127 就和 ascii 完全一致了。

gbk 的第一字节是高位为 1 的,第 2 字节可能高位为 0 。这种情况一定是 gbk ,因为 UTF8 对 >127 的编码一定每个字节高位为 1 。

另外,对于中文,UTF8 一定编码成 3 字节。(似乎亚洲文字都是,UTF8 中双字节好象只用于西方字符集)

汉字以及汉字标点(包括日文汉字等),在 UTF8 中一定被编码成:1110**** 1******* 1*******

连续汉字数量不是 3 的倍数的 gb2312 编码的汉字字符串一定不会被误认为 UTF8 。用了一些gbk 扩展字,或是插入了一些 ascii 符号的字符串也几乎不会被认为是 UTF8 。

所以,我们的检测算法检测网页有连续的UTF8中文字符1110**** 1******* 1*******,1110**** 1******* 1*******出现,就可以确定不是GBK编码了。

一般说来,只要汉字稍微多几个,gbk 串被误认为 UTF8 的可能性极其低。(只需要默认不使用 UTF8 中双字节表示的字符)可能性低,这里还有另外一个原因。UTF8 中汉字编码的第一个字节是 1110**** ,这处于汉字的 gb2312 中二级汉字(不常用汉字,区码从 11011000 开始)的编码空间。一般是一些生僻字才会碰上。

姓名:
评论

vvv

2020-12-05 11:12:36

dd

©2018-2020 h5spirit.cn  | 京ICP备19057243号-1 | QQ群:694364182