如何将“二进制文本”转换为“可见文本”?

时间:2015-11-06 01:42:35

标签: linux character-encoding

我有一个非ASCII字符的文本文件。 我无法通过fileenca检测编码。

file non_ascii.txt
non_ascii.txt: Non-ISO extended-ASCII text

enca non_ascii.txt
Unrecognized encoding

但是我可以在Windows Notepad ++中正常打开它

编辑:上面的表达引起了误解。非常遗憾。 事实上,我选择了原始文件的一些部分并将它们放入新的文本文件中,然后在记事本++中打开。

2部分如下所示。它们由记事本++以两种不同的方式解码。 enter image description here

enter image description here

问题:

  1. 我如何检测linux下的文件编码?
  2. 如何恢复<F1><EE><E9><E4><FF>代表的字符? 即使“сойдя”编码为<F1><EE><E9><E4><FF>,我也无法通过“grep'сойдя'win.txt”获得结果?
  3. 文件内容切片如下:

    less non_ascii.txt
    "non_ascii.txt" may be a binary file.  See it anyway?
    <F1><EE><E9><E4><FF>
    <F2><F0><E0><EA><F2><EE><E2><E0><F2><FC><F1><FF>
    <D0><F2><E9><E4><D7><E9><E7><E1><EC><E1><F3><F8>
    <D1><E5><EA><F3><ED><E4>
    <F0><E0><E7><E3><F0><F3><E7><EA><E8>
    <EF><EE><E4><F1><F2><E0><E2><EB><FF><F2><FC>
    <F0><E0><E7><E3><F0><F3><E7><EA><E5>
    <F1><EE><E9><E4><F3>
    <F0><E0><E7><E3><F0><F3><E7><EA><E0>
    <F1><EE><E2><EB><E0><E4><E0><EB><E8>
    <C1><D7><E9><E1><F0><EF><FE><F4><E1>
    <CB><C1><D3><D3><C9><D4><C5><D2><C9><D4>
    <F1><EE><E2><EB><E0><E4><E0><EB><EE>
    <F1><EE><E9><E4><E8>
    <F1><EE><E2><EB><E0><E4><E0><EB><E0>
    

1 个答案:

答案 0 :(得分:3)

您的问题实际上有两个部分:(1)如何识别未知编码?(2)如何将其转换为有用的东西?

第一部分是真正的挑战,实际上无法用普遍的术语来回答 - 在一般情况下,没有可靠的方法来识别未知的8位编码。有些编码会给你很好的提示(UTF-8是一个很好的例子),在很多情况下,如果你很清楚文本应该代表什么,问题就可以解决了。

mapping of 8-bit character meanings可能会有所帮助(咳嗽,链接是我的),在这种情况下,请快速提示Windows code page 1251。感谢十六进制转储和带有您期望的图像的图片!

通过这种方式,转换很容易。

iconf -f cp1251 -t utf-8 non_ascii.txt >utf8.txt

如果您的Linux系统已设置为在终端上使用UTF-8,则grep命令现在应在utf-8.txt上运行。

有些文字是“ANSI”(无论如何这是一个虚假的术语)的迹象可能只是一个红色的鲱鱼 - 据我所知,你的摘录中的所有内容看起来都是格式良好的CP1251。