如何更正文件的字符编码?

我有一个ANSI编码的文本文件,不应该被编码为ANSI,因为有ANSI重音字符不支持。 我宁愿使用UTF-8。

数据可以正确解码还是在转码中丢失?

我可以使用哪些工具?

这里是我所拥有的一个样本:

ç é 

从上下文(café应该是咖啡馆)我可以看出这些应该是这两个字符:

 ç é 

编辑:在进入更复杂的解决scheme之前消除一个简单的可能性:你有没有尝试在你正在阅读文件的文本编辑器中设置字符集为utf8? 这可能只是一个有人发给你一个utf8文件,你正在阅读的编辑器说cp1252。

仅举两个例子,就是通过单字节编码的镜头读取utf8的情况,可能是iso-8859-1,iso-8859-15或cp1252之一。 如果您可以发布其他问题字符的示例,应该可以缩小更多。

由于对字符的视觉检查可能会引起误解,因此您还需要查看基础字节:您在屏幕上看到的§可能是0xa7或0xc2a7,这将决定您必须执行的字符集转换types。

你能否假设你所有的数据都是以同样的方式被扭曲的 – 它来自同一个源头,经过了相同的转换序列,所以例如文本中没有一个单独的数据,它总是一个§? 如果是这样,问题可以通过一系列字符集转换来解决。 如果您可以更具体地了解您所使用的环境和您正在使用的数据库,此处有人可能会告诉您如何执行适当的转换。

否则,如果问题字符只出现在数据中的某些地方,则必须按照“没有作者打算在文本中放置”的假设,通过实例来实例化,所以无论何时它,取代ç“。 后一种select更危险,首先是因为对作者意图的假设可能是错误的,其次是因为你必须自己发现每一个问题的特征,如果有太多的文本要进行视觉检查或者是写用一种对你来说是陌生的语言或写作系统。

按照记事本++的这些步骤

1-复制原文

2-在Notepad ++中,打开新文件,改变编码 – >select一个你认为是原始文本的编码。 尝试编码“ANSI”,有时Unicode文件被某些程序读为ANSI

3-粘贴

4-然后再次通过相同的菜单转换为Unicode:编码 – >“UTF-8编码”(不是“转换为UTF-8”),并希望它会变得可读

以上步骤适用于大多数语言。 您只需在粘贴记事本++之前猜测原始编码,然后通过相同的菜单转换为另一种基于Unicode的编码,以查看事物是否可读。

大多数语言存在两种forms的编码:1-大多数计算机最初使用旧的ANSI(ASCII)格式,只有8位。 8位仅允许256个可能性,其中128个是常规的拉丁字母和控制字符,最后的128位根据PC语言设置的不同被读取。2新的Unicode标准(高达32位)为每个字符提供唯一的代码在所有目前已知的语言,还有更多的未来。 如果一个文件是unicode,则应该在安装了该语言字体的任何PC上理解。 请注意,即使UTF-8上升到32位,只是与UTF-16和UTF-32一样广泛,只是为了节省磁盘空间,它试图保留8位拉丁字符

当你看到字符序列像ç和é时,它通常表示一个UTF-8文件已经被一个程序打开,以ANSI(或类似的forms)读取它。 Unicode字符,如这些:

U + 00C2拉丁文大写字母A,带有旋律
U + 00C3拉丁文大写字母A,带颚化符号
U + 0082这里允许rest
U + 0083这里没有rest

由于UTF-8使用可变字节策略,因此倾向于在​​ANSI文本中显示。 这个策略在这里解释得非常好。

对您的好处是,这些奇怪的字符的外观使得它相对容易find,从而取代不正确转换的实例。

我相信,由于ANSI总是使用每个字符1个字节,所以可以通过简单的search和replace操作来处理这种情况。 或者更方便的是,使用一个包含有问题的序列和所需字符之间的表映射的程序,如下所示:

“ – >”#应该是一个开头的双引号
â€? – >“#应该是一个收盘双曲线报价

任何给定的文本,假设它是英文的,将会有相对较less数量的不同types的replace。

希望有所帮助。

使用iconv – 请参阅在字符集之间转换文本文件的最佳方法?

从命令行使用vim:

 vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename 

如果在文件中看到问号,或者口音已经丢失,则回到utf8将无助于您的原因。 例如,如果咖啡馆变成咖啡馆 – 单独改变编码不会有帮助(你将需要原始数据)。

你可以在这里粘贴一些文字,这将帮助我们肯定地回答。

在崇高的文本编辑器中,文件 – >重新打开编码 – >select正确的编码。

一般来说,编码是自动检测的,但是如果不是,你可以使用上面的方法。

然后是有点旧的recode程序。

有一些程序试图检测像chardet这样的文件的编码。 然后你可以使用iconv将它转换成不同的编码。 但是,这要求原始文本仍然完好,没有信息丢失(例如通过删除重音符号或整个重音字母)。

我发现了一个简单的方法来自动检测文件编码 – 将文件更改为文本文件(在Mac上将文件扩展名重命名为.txt),并将其拖到Mozilla Firefox窗口(或文件 – >打开)。 Firefox会检测到编码 – 你可以在View – > Character Encoding下看到它的内容。

一旦我知道正确的编码,我使用TextMate更改了文件的编码。 文件 – >使用编码重新打开并select您的编码。 然后文件 – >另存为和更改编码为UTF-8和行结束LF(或任何你想要的)

在OS X Synalyze它! 可以让你用不同的编码显示你的文件的一部分(ICU库支持的所有文件)。 一旦你知道什么是源编码,你可以通过剪贴板复制整个文件(字节),并插入到一个新的文件,目标编码(UTF-8或任何你喜欢的)被选中。

使用UTF-8或其他Unicode表示法处理UnicodeChecker时非常有用

当我search中文字符的代码页问题的解决scheme时,我发现这个问题,但最终我的问题只是一个问题,没有在UI中正确显示它们。

如果有其他人有这个问题,你可以简单地通过改变窗口中的本地到中国,然后再回来。

我在这里find了解决scheme:

http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chinesejapanese-characters-to/fdb1f1da-b868-40d1-a4a4-7acadff4aafa?page=2&auth= 1

同样高估了Gabriel的回答,就是在记事本++中查看数据的时候,窗口就是这样的。