如何更正文件的字符编码?
-
02-07-2019 - |
题
我有一个ANSI编码的文本文件,不应该像重音一样编码为ANSI ANSI不支持的字符。我宁愿使用UTF-8。
数据可以正确解码还是在转码中丢失?
我可以使用哪些工具?
以下是我的例子:
ç é
我可以从上下文(café应该是café)中知道这些应该是这两个字符:
ç é
解决方案
编辑:在进入更复杂的解决方案之前消除一种简单的可能性:您是否尝试在正在读取文件的文本编辑器中将字符集设置为utf8?这可能只是某人向你发送一个utf8文件的情况,你正在编辑器中读到cp1252。
仅举两个例子,这是通过单字节编码镜头读取utf8的情况,可能是iso-8859-1,iso-8859-15或cp1252之一。如果您可以发布其他问题字符的示例,则应该可以将其缩小范围。
由于对角色的视觉检查可能会产生误导,因此您还需要查看基础字节:§你在屏幕上看到的可能是0xa7或0xc2a7,这将决定你必须要进行的字符集转换。
你能否假设你的所有数据都以完全相同的方式扭曲 - 它来自同一个源并经历了相同的转换序列,因此例如没有一个é在你的文字中,它总是ç?如果是这样,可以通过一系列字符集转换来解决问题。如果您可以更加具体地了解您所处的环境以及您正在使用的数据库,那么此处的某些人可能会告诉您如何执行适当的转换。
否则,如果问题字符仅发生在数据中的某些位置,则必须根据“没有作者打算放置Ã&#”这样的假设,逐个实例化它。 167;在他们的文本中,所以每当你看到它时,用ç"替换。后一种选择风险更大,首先是因为那些关于作者意图的假设可能是错误的,其次是因为你必须自己发现每一个问题,如果有太多的文字要用于视觉检查,或者如果它是书面的,这可能是不可能的。在一种对你不熟悉的语言或书写系统中。
其他提示
使用Notepad ++
执行以下步骤1-复制原始文本
2-在Notepad ++中,打开新文件,更改编码 - >选择您认为原始文本如下的编码。也可以尝试编码“ANSI”。因为有时Unicode文件被某些程序读作ANSI
3-粘贴
4-然后通过在同一菜单上再次转换为Unicode:编码 - > “以UTF-8编码” (不是“转换为UTF-8”)并希望它会变得可读
以上步骤适用于大多数语言。您只需要在粘贴notepad ++之前猜测原始编码,然后通过相同的菜单转换为基于Unicode的备用编码,以查看事物是否可读。
大多数语言以2种编码形式存在: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(或类似形式)读取它。 Unicode字符,例如:
U + 00C2拉丁语大写字母A与抑扬符号
U + 00C3拉丁语大写字母A与代字号
U + 0082允许在这里休息
U + 0083这里没有休息
倾向于出现在ANSI文本中。这个策略很好地解释了这里。
您的优势在于,这些奇怪字符的外观使得查找错误转换的实例变得相对容易,从而取代了它。
我相信,由于ANSI每个字符总是使用1个字节,因此您可以通过简单的搜索和替换操作来处理这种情况。或者更方便的是,程序包含违规序列和所需字符之间的表格映射,如下所示:
“ - > “ #应该是一个开头双卷曲引用
â&#8364 ;? - > ” #应该是一个收尾双曲引语
任何给定的文本,假设它是英文的,将会有相对较少的不同类型的替换。
希望有所帮助。
使用命令行中的vim:
vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
使用iconv - 请参阅在两者之间转换文本文件的最佳方式字符集?
在崇高的文本编辑器中,文件 - >重新打开编码 - >选择正确的编码。
通常,编码是自动检测的,但如果没有,则可以使用上述方法。
如果您在文件中看到问号或者重音已经丢失,那么返回utf8将无助于您的原因。例如如果咖啡馆é变成咖啡馆 - 改变编码本身无济于事(你需要原始数据)。
你可以在这里粘贴一些文字,这有助于我们回答。
然后有一些较旧的重新编码计划。
有些程序试图检测文件的编码,例如 chardet 。然后你可以使用iconv将它转换为不同的编码。但这要求原始文本仍然完好无损,并且不会丢失任何信息(例如删除重音符号或整个重音字母)。
我找到了一种自动检测文件编码的简单方法 - 将文件更改为文本文件(在mac上将文件扩展名重命名为.txt)并将其拖到Mozilla Firefox窗口(或文件 - >打开) 。 Firefox将检测编码 - 您可以在View - >下看到它的结果。字符编码。
一旦我知道正确的编码,我就使用TextMate更改了文件的编码。文件 - >重新打开使用编码并选择您的编码。然后文件 - >另存为并将编码更改为UTF-8并将行结尾更改为LF(或任何您想要的)
在OS X上 Synalyze It!可让您以不同的编码显示文件的各个部分(所有这些都由ICU图书馆)。一旦你知道源编码是什么,你可以通过剪贴板复制整个文件(字节)并插入到一个新的文件中,在那里选择目标编码(UTF-8或任何你喜欢的)。
使用UTF-8或其他Unicode表示时非常有用 UnicodeChecker
我在搜索有中文字符的代码页问题的解决方案时发现了这个问题,但最后我的问题只是Windows无法在UI中正确显示它们的问题。
如果其他人有同样的问题,您可以通过将Windows中的本地更改为中国然后再返回来修复它。
我在这里找到了解决方案:
同样支持Gabriel的答案,因为查看记事本++中的数据是让我知道窗户的原因。