免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: yuleyouxi
打印 上一主题 下一主题

[C] 关于windows-1251字符集检测和转码utf-8的问题 [复制链接]

论坛徽章:
0
11 [报告]
发表于 2013-05-27 16:05 |只看该作者
mci2004 发表于 2013-05-25 22:53
lz 我给你发私信了,收到了吗?  

私信的原因倒不是保密,而是我觉得我的方法很sb,不好意思拿出来说。
...
我前两天再看了下,我在想能不能像处理GBK一样处理呢?windows-1251也是有一个范围的,是不是可以根据这个来判断是不是这个字符集 然后再来转换呢?

论坛徽章:
0
12 [报告]
发表于 2013-05-28 10:52 |只看该作者
mci2004 发表于 2013-05-25 22:53
lz 我给你发私信了,收到了吗?  

私信的原因倒不是保密,而是我觉得我的方法很sb,不好意思拿出来说。
...
ISO 8859各个体系都是只用00-FF表示,貌似也只能用local来判断了,要不谁知道是用的ISO8859-1还是ISO8859-5啊。。。另外,再ID3.cpp中看到用0x00  0x02 0x03分别表示ISO8858-1 UTF-16 UTF-8,那是不是还有别的数字表示别的语言呢?可惜网上没找到这块资料说明这个数字有哪些选择。。。

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
13 [报告]
发表于 2013-05-28 14:56 |只看该作者
回复 12# yuleyouxi


没有办法判断出俄语,原因很简单,俄语是单字节的,和中,日,韩的语言文字不一样,他们都是双字节表示。

确定中,日,韩这些字符集的方法也很简单,就是去查一张表,然后根据命中情况得出一个 confidence,然后就认为当前的文字和confidence最大者一致。


如果想判断出俄语,可以用上面类似的方法,但是单字节的字符集,文字太少了,而且前面的128个字符和ascii保持一致,比如我想“猜”这个字符串(包含5个字符)是 latin1 还是1251。很可能这5个字符的表示方式即出现在latin1中又出现在1251中。所以,没法区分开。(我试过,效果很差)

lz,可以出查一下这两种(latin1 和1251)的code page,你就明白了....



lz,我说明白了吗?也许是我的方法有问题,你可以想个更好的,到时候跟我分享下哈。。。。

论坛徽章:
0
14 [报告]
发表于 2013-05-29 18:15 |只看该作者
mci2004 发表于 2013-05-28 14:56
回复 12# yuleyouxi
嗯  后来我看了下ISO 8859 貌似只能根据local来判断了,android原始代码貌似就是只管Latin-1,其他的忽略掉了,我想的办法也只有根据local来,其他系列的不管了

论坛徽章:
3
摩羯座
日期:2013-11-12 20:06:19午马
日期:2013-11-27 16:35:55双鱼座
日期:2014-04-04 19:02:30
15 [报告]
发表于 2013-05-30 11:23 |只看该作者
回复 14# yuleyouxi


    再补充一下,目前的编辑软件(如 vim)也好,或者是OS上对字符集的处理都是把不认识的字符当成latin1,所以,我们有时候看到的“乱码”其实就是一堆latin1罢了!


   为什么转latin1呢?因为latin1覆盖的国家最多?

论坛徽章:
0
16 [报告]
发表于 2013-06-06 16:19 |只看该作者
回复 15# mci2004

可能吧,不管怎么样,总要设个默认的吧 呵呵
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP