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