+ -
当前位置:首页 → 问答吧 → 如何知道一个文件用的是什么编码?

如何知道一个文件用的是什么编码?

时间:2009-01-16

来源:互联网

有一些文件,vi编辑的时候是正常的,但more的时候却乱码.如何得知这些文件使用的是什么编码?

又或者不知道这些文件编码的情况下如何转换为utf8?

作者: Hosanna   发布时间: 2009-01-16

app-i18n/enca

作者: richardpku   发布时间: 2009-01-16

http://www.gentoo-cn.org/gitweb/?p=g...b5d31d;hb=HEAD
我这个的东西利用了python的chardet
一个可以猜测编码的库

作者: zhllg   发布时间: 2009-01-16

谢谢!我尝试一下。

作者: Hosanna   发布时间: 2009-01-16

很实用的东西,收藏了

作者: axlrose   发布时间: 2009-01-17

how to solve "No module named chardet"?
thx.

作者: bigbusyboy   发布时间: 2009-01-17

引用:
作者: bigbusyboy
how to solve "No module named chardet"?
thx.
emerge dev-python/chardet

作者: crccw   发布时间: 2009-01-17

引用:
作者: crccw
emerge dev-python/chardet
多谢。

看样不会python不好意思给你们gentoo用户打招呼啊~

作者: bigbusyboy   发布时间: 2009-01-20

用户不一定要会编程,

作者: zhllg   发布时间: 2009-01-20

其实,我也不会

作者: crccw   发布时间: 2009-01-20

不太清楚意图。。就我知道的几种常见的格式(以指定十六进制开始的):

ef bb bf 开始的表示 utf8
FE FF/FF FE 表示小头/大头 utf16,M$混淆为 ucs-2(大头在m$网络文档又混淆为网络字节序,死也不肯招是unix序)
ff fe 00 00/00 00 ff fe 则分别表示 utf32 小头/大头

通常程序只能检测local码跟utf码,也就是说通常识别gbk 或 utf,而无法区别gbk shift-jis 这样的编码,硬要实现则必须进行全文编码识别(搜索所有文字的字节表示的范围属于哪个local)。

update:
代码:
 也就是说通常识别gbk 或 utf,而无法区别gbk shift-jis 这样的编码
意思是说
代码:
 也就是说通常识别gbk/shift-jis 还是 utf,而无法区别gbk 还是 shift-jis 这样的编码,换句话说,区别是ascii、utf、非utf 的local编码 三种,而非utf的local 要再细化成gbk/shift-jis 类似则需要进行全文byte上下标范围收集才可以,工作量很大

作者: arli   发布时间: 2009-01-20

chardet的目的就是要识别任意字符集
比如gbk, shift-jis
当然样本要足够大,才能更准确

作者: zhllg   发布时间: 2009-01-20

你说的是BOM,微软特别喜欢的东东,但是Linux下用得不多..


引用:
作者: arli
不太清楚意图。。就我知道的几种常见的格式(以指定十六进制开始的):

ef bb bf 开始的表示 utf8
FE FF/FF FE 表示小头/大头 utf16,M$混淆为 ucs-2(大头在m$网络文档又混淆为网络字节序,死也不肯招是unix序)
ff fe 00 00/00 00 ff fe 则分别表示 utf32 小头/大头

通常程序只能检测local码跟utf码,也就是说通常识别gbk 或 utf,而无法区别gbk shift-jis 这样的编码,硬要实现则必须进行全文编码识别(搜索所有文字的字节表示的范围属于哪个local)。

作者: richardpku   发布时间: 2009-01-20

那个能做到全文识别呢?

作者: 食古不化   发布时间: 2009-01-20

汗,俺向来都是在Firefox里试的

作者: Reiase   发布时间: 2009-01-21

引用:
作者: 食古不化
那个能做到全文识别呢?
chardet啊

作者: zhllg   发布时间: 2009-01-21

python
>>>import chardect
>>>file=open('/aa/bb/cc/dd')
>>>a=file.read()
>>>file.close()
>>>encoding=chardet.detect(a)['encoding']
>>>print encoding

作者: 三翻领   发布时间: 2009-01-21