解决将汉字GBK码分拆后进行UTF-8编码而出现的乱码
来源:互联网 发布:上海万国数据待遇 编辑:程序博客网 时间:2024/05/22 21:13
这种乱码是比较常见的,类似于“À´×Ô”,其内码形式:%c3%80%c2%b4%c3%97%c3%94,这其实是“来自”两个字的乱码,但是为什么显示成了“À´×Ô”?是因为“来自”两个字符的GBK是:C0 B4 D7 D4,本来C084表示“来”,D7D4表示“自”,很多软件判断错误,把双字节拆成单字节编码成utf-8就是:c3 80 c2 b4 c3 97 c3 94,这种乱码的特征就是每隔一个字节不是C2就是C3。
我使用VB编程,先将c3 80 c2 b4 c3 97 c3 94还原成GBK码,因为两位的UTF-8编码规则是110XXXXX10XXXXXX,如C397的二进制是:11000011 10010111,高位去掉110,就是00011,低位去掉10,就是010111,再合起来:00011010111,就是&HD7,因为C3是11000011,跟后面低位合并,就是11XXXXXX,其实就是加上01000000,就是&H40,C2是11000010,跟后面低位合并跟后面低位合并,就是10XXXXXX,其实不变。因此具体方法是:高位为C3的,低位加&H40,高位为C2的,低位不变,同时高位都去掉,这样c3 80 c2 b4 c3 97 c3 94就变成了C0 B4 D7 D4。
但是由于VB的字符串都是UNICODE编码的,ChrW函数也只认UNICODE的汉字,因此直接ChrW(&HC0B4)显示还不正确,因此需要将GBK码再转成UNICODE码,具体方法有两种,一种是运算,另一种是取巧了,在网上下载了一个gbk-Unicode的对照码表,编段简单的程序,查找对应的Unicode码即可。最后得出C0B4 D7D4的UNICODE码为:6765 81EA,ChrW(&H6765) & ChrW(&81EA)就显示出“来自”两个字了。
具体程序还比较乱,我整理一下再发上来。
- 解决将汉字GBK码分拆后进行UTF-8编码而出现的乱码
- utf-8编码从ACCESS输出汉字出现乱码的解决
- [JAVA] GBK转UTF-8汉字乱码 发现与解决
- c# GBK,Unicode,UTF-8编码与汉字的转换
- PHP中不同编码的汉字占的字节数不同gbk,GBK,UTF-8,utf-8
- PHP中不同编码的汉字占的字节数不同gbk,GBK,UTF-8,utf-8
- java gbk--utf-8乱码解决函数
- 将汉字转为UTF-8编码
- GBK转码成UTF-8及奇数个汉字解码得到乱码的问题(C++)
- 解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换
- C#_汉字与GBK,Unicode,UTF-8编码之间的转换(by daode1212)
- C#_汉字与GBK,Unicode,UTF-8编码之间的转换(by daode1212)
- C#_汉字与GBK,Unicode,UTF-8编码之间的转换
- 解决中文字符乱码问题,如何将gbk格式转换utf-8格式
- utf-8编码的页面向GBK编码的页面提交中文表单乱码终极解决方案
- gbk编码系统环境运行utf-8编码的Qt程序时乱码解决办法
- 网页采用UTF-8编码,传递汉字参数时出现乱码解决方法
- 汉字问题 UTF-8编码 乱码如何实现汉字转化
- 阿里巴巴杯与武大第六届中部地区邀请赛的其中几题
- (转)内存对齐 #pragma pack(n) __declspec(align(#))
- 介绍 Jython
- 图片上传、预览、修改
- dwr.xml 我的简单使用说明
- 解决将汉字GBK码分拆后进行UTF-8编码而出现的乱码
- 通过 GPS 信息获取当前所在城市名的代码
- stagefright extactor 分析
- C#中关键字ref与out的区别
- 写点什么吧.
- Linux字符设备驱动(三)
- 數據庫面試總結
- 在C# 中通过 PInvoke 调用Win32 DLL
- u盘写保护无法格式化的修复