How do I correct the character encoding of a file?
我有一个ANSI编码的文本文件,它不应该像有重音的那样被编码为ANSI。ANSI不支持的字符。我宁愿使用UTF-8。
数据是否可以正确解码或在转码过程中丢失?
我可以使用什么工具?
以下是我的样品:
1 | ?§ ?? |
我能从上下文中分辨出来(咖啡馆??应该是caf_)这两个字符:
1 | ? é |
使用记事本执行这些步骤++
1-复制原文
2-在记事本+中,打开新文件,更改编码->选择您认为原始文本遵循的编码。尝试使用"ansi"编码,因为某些程序有时会将unicode文件读取为ansi。
3 - Paste
4-然后通过同样的菜单再次转换为Unicode:编码->"以UTF-8编码"(不是"转换为UTF-8"),希望它能变得可读。
以上步骤适用于大多数语言。在粘贴到记事本++之前,您只需猜测原始编码,然后通过同一菜单转换为基于Unicode的备选编码,以查看内容是否变得可读。
大多数语言有两种编码形式:1-旧的传统ANSI(ASCII)形式,只有8位,最初被大多数计算机使用。8位只允许256种可能性,其中128个是常规拉丁字符和控制字符,最后的128位是根据PC语言设置不同读取的2-新的Unicode标准(高达32位)为所有当前已知语言中的每个字符提供了一个唯一的代码,并将提供更多的代码。如果一个文件是Unicode的,那么应该在安装了该语言字体的任何PC上理解它。请注意,即使是UTF-8也会增加到32位,其宽度与UTF-16和UTF-32一样宽,只是它会尝试保留8位拉丁字符,以节省磁盘空间。
编辑:在进入更复杂的解决方案之前要消除的一个简单的可能性:您是否尝试在正在读取文件的文本编辑器中将字符集设置为utf8?这可能只是有人向您发送一个utf8文件,您在一个编辑器集中读取该文件,设置为cp1252。
举两个例子,这是一个通过单字节编码透镜读取UTF8的情况,可能是ISO-8859-1、ISO-8859-15或CP1252中的一个。如果您可以发布其他问题字符的示例,那么应该可以进一步缩小范围。
由于对字符的目视检查可能会产生误导,您还需要查看底层字节:您在屏幕上看到的§可能是0xA7或0xC2A7,这将决定您必须进行的字符集转换的类型。
你能假设你所有的数据都是以完全相同的方式被扭曲的吗?它来自同一个源,并经历了相同的转换序列,因此,例如,你的文本中没有一个_,它总是这样?什么?如果是这样,问题可以通过字符集转换序列来解决。如果您可以更具体地了解您所在的环境和您使用的数据库,这里的某人可能会告诉您如何执行适当的转换。
否则,如果问题字符只出现在数据中的某些地方,则必须根据"没有作者打算放置"这一行中的假设,逐个实例进行处理。在他们的文本中,所以每当你看到它时,替换为?".后一种选择风险更大,首先是因为那些关于作者意图的假设可能是错误的,其次是因为你必须自己找出每个问题字符,如果有太多的文本需要目视检查,或者是用你不熟悉的语言或书写系统写的,这可能是不可能的。
当你看到像这样的字符序列时?什么??,这通常表示一个utf-8文件已经被一个以ansi(或类似)形式读取的程序打开。Unicode字符,如:
带扬抑符的U+00C2拉丁文大写字母A带颚化符的U+00C3拉丁文大写字母A此处允许U+0082中断U+0083这里不休息
由于UTF-8使用的可变字节策略,往往会出现在ANSI文本中。这个策略在这里解释得很好。
您的优势在于,这些奇数字符的外观使得查找和替换不正确转换的实例相对容易。
我相信,由于ansi总是每个字符使用1个字节,所以您可以通过一个简单的搜索和替换操作来处理这种情况。或者更方便的方法是,使用一个程序,该程序包括有问题序列和所需字符之间的表映射,如下所示:
欧元?->"应该是一个开头的双引号欧元?->"应该是右双引号
任何给定的文本,假设它是英文的,将有相对较少的不同类型的替换。
希望有帮助。
使用来自命令行的VIM:
1 | vim -c"set encoding=utf8" -c"set fileencoding=utf8" -c"wq" filename |
使用iconv-查看在字符集之间转换文本文件的最佳方法?
在Sublime文本编辑器中,文件->使用编码重新打开->选择正确的编码。
通常,编码是自动检测的,但如果不是,则可以使用上述方法。
如果您在文件中看到问号,或者重音符号已经丢失,那么返回到utf8将对您的原因没有帮助。例如,如果caf_变为caf e,单独更改编码将无济于事(而且您需要原始数据)。
你能在这里粘贴一些文字吗,这将帮助我们确定答案。
我在寻找解决我使用汉字的代码页问题的方法时发现了这个问题,但最终我的问题只是Windows在用户界面中没有正确显示它们。
如果其他人也有同样的问题,您只需将Windows本地版本更改为"中国",然后再返回即可解决。
我在这里找到了解决方案:
http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-get-chineseapanese-characters-to/fdb1f1da-b868-40d1-a4a4-7acadff4aafa?页面=2&auth=1
加布里埃尔的回答也很乐观,因为在记事本+中查看数据是我对Windows的看法。
在OS X上对其进行分析!允许以不同的编码显示文件的部分内容(所有这些都受ICU库支持)。一旦你知道了什么是源代码,你就可以通过剪贴板复制整个文件(字节),然后插入到一个新的文档中,在其中选择了目标代码(UTF-8或你喜欢的任何代码)。
使用UTF-8或其他Unicode表示时非常有用的是unicodechecker。
我找到了一个自动检测文件编码的简单方法-将文件更改为文本文件(在Mac上,将文件扩展名重命名为.txt),然后将其拖动到Mozilla Firefox窗口(或文件->打开)。火狐会检测到编码——你可以在查看->字符编码下看到它的结果。
一旦知道正确的编码,我就使用textmate更改了文件的编码。文件->使用编码重新打开并选择编码。然后,文件->另存为并将编码更改为UTF-8,行尾更改为LF(或您想要的任何内容)。
有些程序尝试检测文件的编码,如chardet。然后可以使用iconv将其转换为其他编码。但这要求原始文本保持完整,不会丢失任何信息(例如删除重音符号或整个重音字母)。
还有一个比较老的重编码程序。