【问题标题】:sort: string comparison failed Invalid or incomplete multibyte or wide character排序:字符串比较失败 无效或不完整的多字节或宽字符
【发布时间】:2016-03-29 18:29:30
【问题描述】:

我正在尝试对文本文件使用以下命令:

$ sort <m.txt | uniq -c | sort -nr >m.dict 

但是我收到以下错误消息:

sort: string comparison failed: Invalid or incomplete multibyte or wide character
sort: Set LC_ALL='C' to work around the problem.
sort: The strings compared were ‘enwedig\r’ and ‘mwy\r’.

我在 Windows 7 上使用 Cygwin,之前在编辑 m.txt 以将文件中的每个单词换行时遇到了问题。请看:

Using AWK to place each word in a text file on a new line

我不确定我是否因此而收到这些错误,或者因为 m.txt 包含威尔士字母表中的字符(当我在 Python 中处理威尔士语文本时,我需要将编码更改为 '拉丁语-1')。

我尝试按照错误消息的建议更改 LC_ALL='C' 但这并没有帮助。谁能详细说明我收到的错误,并就我如何尝试解决这个问题提供任何建议。

更新:

在尝试 dos2unix 时,会在某些行显示有关无效字符的错误。原来这些不是威尔士字符,而是其他奇怪的字符(箭头等)。我浏览了删除这些字符的文本文件,直到能够正确使用 dos2unix 命令。但是,在使用 dos2unix 命令后,所有文本都被连接(没有空格/换行符或任何东西,而文件中的每个单词都应该是单独的行)然后我使用了 unix2dos 并且文本文件恢复正常.如何将每个单词放在单独的行中并使用 sort 命令而不会给我关于 '\r' 字符的错误?

【问题讨论】:

  • dos2unix 不会排长队;只有 Windows 工具不理解 Unix 行尾。不要使用 Windows 编辑器查看 Unix 文件,使用 Unix 编辑器,例如 vi,您会在一行中看到每个单词。并确保您使用的是 cygwin 排序程序,而不是 Windows 排序程序。使用/usr/bin/sort 确定。
  • 啊,我明白了。我的问题还没有完全解决,但我认为现在它与原来的问题相差太远了,所以我创建了另一个问题。我现在将关闭此问题,感谢您的帮助。

标签: string sorting unix cygwin uniq


【解决方案1】:

我知道这是一个老问题,但只需运行命令 export LC_ALL='C' 就可以达到sort: Set LC_ALL='C' to work around the problem. 所述的技巧。

【讨论】:

    【解决方案2】:

    看起来像是与 Windows 行尾相关的问题(\r\n\n)。您可以将 m.txt 转换为 Unix 行尾

    dos2unix m.txt
    

    然后重新运行您的命令。

    【讨论】:

    • 嗨,这给出了这条消息“dos2unix:在第 11451024 行找到二进制符号 0x1A dos2unix:跳过二进制文件 m.txt”,然后当我尝试原始命令时,我得到了同样的错误。有什么想法吗?
    • @hjalpmig 你知道文件的编码吗? IE。是 UTF-8、Windows 代码页 X 还是其他编码?这个文件是如何创建的?用 Windows 编辑器打开时看起来不错吗?
    • 在文本编辑器(记事本)中打开时看起来不错。我不完全确定编码,但它包含威尔士语言字符,例如:â、ê、î、ô、û、ŵ、ŷ。我也用 -f 命令尝试了 dos2unix 并且它运行了,但是当我尝试排序时,它出现了同样的错误。
    • 如果任何 UTF-8 语言环境有效,您可以尝试。使用locale -a 列出可用的语言环境,然后使用例如export LC_ALL=en_US.UTF-8。使用locale 验证设置,然后再次运行管道。如果您怀疑编码是某种 ISO8859,请使用适当的语言环境执行相同操作。
    • 我相信威尔士语将成为“ISO/IEC 8859-14”的一部分。我怎样才能将语言环境更改为那个?使用“locale -a”列出语言环境时不显示。
    猜你喜欢
    • 1970-01-01
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 2016-07-05
    • 2023-04-03
    相关资源
    最近更新 更多