Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何转换;“二进制文本”;至;可见文本;?_Linux_Character Encoding - Fatal编程技术网

Linux 如何转换;“二进制文本”;至;可见文本;?

Linux 如何转换;“二进制文本”;至;可见文本;?,linux,character-encoding,Linux,Character Encoding,我有一个充满非ASCII字符的文本文件。 我无法通过文件或enca检测编码 file non_ascii.txt non_ascii.txt: Non-ISO extended-ASCII text enca non_ascii.txt Unrecognized encoding 但我可以在Windows记事本中正常打开它++ 编辑:上面的表达导致误解。对不起。 事实上,我选择了原始文件的一些部分并将它们放入新的文本文件中,然后在记事本++中打开。 这两个部分如下所示。它们被记事本++以两种

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

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

enca non_ascii.txt
Unrecognized encoding
但我可以在Windows记事本中正常打开它++

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

这两个部分如下所示。它们被记事本++以两种不同的方式解码。

问题:

  • 如何在linux下检测文件编码
  • 如何恢复由
    表示的字符? 我无法通过“grep'Саааааа'win.txt”获得结果,即使“Сааа”编码为
    文件内容切片如下所示:

    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>
    
    更少的非ascii.txt
    “non_ascii.txt”可以是二进制文件。看到了吗?
    
    你的问题实际上有两部分:(1)如何识别未知编码,以及(2)如何将其转换为有用的编码

    第一部分是真正的挑战,并且不能用通用术语来回答——在一般情况下,没有可靠的方法来识别未知的8位编码。一些编码给了您很好的提示(UTF-8是一个很好的例子),在许多情况下,如果您对文本应该表示什么有很好的了解,那么问题就可以解决

    A可能有帮助(咳嗽,链接到我的),在这种情况下,快速提示。感谢十六进制转储和图片与您期望的表现

    这样一来,转换就很容易了

    iconv -f cp1251 -t utf-8 non_ascii.txt >utf8.txt
    
    如果您的Linux系统设置为在终端使用UTF-8,您的
    grep
    命令现在应该可以在
    UTF-8.txt
    上运行

    有些文字是“ANSI”(不管怎么说,这是一个伪造的术语)这一说法可能只是一种误导——据我所知,你的摘录中的所有内容看起来都像格式良好的CP1251


    有些人做了合理的工作,至少引导你朝着正确的方向前进,尽管你必须明白,就像人类专家一样,他们必须猜测文本应该代表什么。有些情况下,他们没有足够的信息来正确猜测,或者是因为有几个候选编码几乎没有差异(例如,Latin-1 vs Latin-9 vs Windows-1252,所有这些编码在前128个位置都与纯7位US-ASCII重叠)或者因为输入没有包含足够的信息来建立任何通用模式。

    记事本+++认为编码是什么?应该是在状态栏的某个地方,我从文件中得到了2个片段。它们显示的是“Windows-1251”和“ANSI”。文件的某些部分可能包含其他编码。那么,有没有办法将混合编码的内容转换成UTF-8呢?您的文件包含以不同方式编码的部分?我从不同的来源获得了此文件内容。通过python脚本从多个文件中读取行,然后最终写入一个文件。您不能以不同的编码连接文件,然后机械地将结果转换为有意义的内容。另请参阅有关如何定义ANSI作为字符集标识符的详细信息:指向您的(cough)的链接8位字符含义的映射页面已断开;)@非常感谢你的邀请;更新。我以为我已经找到了rawgit的过期链接,但显然我错过了一些。@Azeem谢谢,修复了!令人难以置信的是,这个打字错误在将近5年的时间里都没有被注意到。