我有一个 ANSI 编码的文本文件,它不应该被编码为 ANSI,因为有 ANSI 不支持的重音字符。我宁愿使用 UTF-8。
数据可以正确解码还是在转码中丢失?
我可以使用哪些工具?
这是我所拥有的示例:
ç é
我可以从上下文中看出(café应该是cafe)这些应该是这两个字符:
ç é
我有一个 ANSI 编码的文本文件,它不应该被编码为 ANSI,因为有 ANSI 不支持的重音字符。我宁愿使用 UTF-8。
数据可以正确解码还是在转码中丢失?
我可以使用哪些工具?
这是我所拥有的示例:
ç é
我可以从上下文中看出(café应该是cafe)这些应该是这两个字符:
ç é
使用 Notepad++ 执行以下步骤
1-复制原文
2-在记事本++中,打开新文件,更改编码->选择您认为原始文本遵循的编码。尝试编码“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 位,以节省磁盘空间
编辑:在进入更复杂的解决方案之前消除一个简单的可能性:您是否尝试在正在读取文件的文本编辑器中将字符集设置为 utf8?这可能只是有人向您发送您在设置为 cp1252 的编辑器中阅读的 utf8 文件的情况。
仅举两个示例,这是通过单字节编码的镜头读取 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:
vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename
使用 iconv - 请参阅在字符集之间转换文本文件的最佳方式?
在崇高的文本编辑器中,文件->使用编码重新打开->选择正确的编码。
一般会自动检测编码,如果没有,可以使用上面的方法。
如果您在文件中看到问号或者重音符号已经丢失,那么返回 utf8 将无助于您的事业。例如,如果咖啡厅变成了咖啡厅 - 单独更改编码将无济于事(并且您需要原始数据)。
你能在这里粘贴一些文字,这将有助于我们肯定回答。
我找到了一种自动检测文件编码的简单方法 - 将文件更改为文本文件(在 Mac 上将文件扩展名重命名为 .txt)并将其拖到 Mozilla Firefox 窗口(或文件 -> 打开)。Firefox 将检测编码 - 您可以在 View -> Character Encoding 下查看它的结果。
一旦我知道正确的编码,我就使用 TextMate 更改了文件的编码。文件 -> 使用编码重新打开并选择您的编码。然后 File -> Save As 并将编码更改为 UTF-8 并将行结尾更改为 LF (或任何你想要的)
我在寻找中文字符的代码页问题的解决方案时发现了这个问题,但最后我的问题只是 Windows 无法在 UI 中正确显示它们的问题。
如果其他人有同样的问题,您可以通过将 Windows 中的本地更改为中国然后再返回来解决它。
我在这里找到了解决方案:
还赞成加布里埃尔的回答,因为在记事本++中查看数据是让我了解 Windows 的原因。
然后是稍旧的重新编码程序。
有些程序会尝试检测像chardet这样的文件的编码。然后您可以使用 iconv 将其转换为不同的编码。但这要求原始文本仍然完好无损,并且不会丢失任何信息(例如通过删除重音符号或整个重音字母)。
在 OS X上 Synalyze 它!允许您以不同的编码显示文件的某些部分(ICU 库支持所有这些编码)。一旦您知道源编码是什么,您就可以通过剪贴板复制整个文件(字节)并插入到选择目标编码(UTF-8 或任何您喜欢的)的新文档中。
使用 UTF-8 或其他 Unicode 表示时非常有用的是UnicodeChecker