【问题标题】:How to find file encoding type or convert any encoding type to UTF-8 in shell?如何在 shell 中查找文件编码类型或将任何编码类型转换为 UTF-8?
【发布时间】:2018-03-01 01:51:58
【问题描述】:

我得到随机编码格式的文本文件,usc-2leansiutf-8usc-2be 等。我必须将此文件转换为utf8

使用以下命令进行转换

iconv options -f from-encoding -t utf-8 <inputfile > outputfile

但如果提供了不正确的from-encoding,则会生成不正确的文件。

我想要一种查找输入文件编码类型的方法。

提前致谢

【问题讨论】:

  • 请通过提供更多信息来改进您的问题:您如何获得该文件?来自谁,来自哪里?该文件可能包含什么?
  • 文件被放置在某个固定的输入文件夹中。
  • 这应该进入问题(不在评论中)。但是放置了那个文件?问他用什么编码! “随机编码”不存在(您的意思是您不知道该编码,您应该尽一切努力找到已使用的编码,否则忽略该文件)

标签: shell encoding utf-8 sh


【解决方案1】:

我们用

做文件编码转换
vim -c "set encoding=utf8" -c "set fileencoding=utf8" -c "wq" filename

工作正常,无需提供源编码。

【讨论】:

  • 这个答案怎么会被接受?这只是验证文件是 UTF8 而不更改其 UTF8 编码!而那个答案根本没有回答这个问题(这是关于一些 unknown 编码)
  • 该命令不会改变(或发现)未知输入文件的编码
【解决方案2】:

在 Linux 上,您可以尝试在未知输入文件上使用 file(1)。大多数情况下,它会正确猜测编码。或者尝试对iconv 进行几种 编码,直到您“感觉”结果可以接受(例如,如果您知道该文件是一些俄罗斯诗歌,您可以尝试KOI-8,UTF-8等......直到你认出一首好的俄罗斯诗歌)。

character encoding 是一场噩梦,可能会模棱两可。文件的提供者应该告诉你他使用了什么编码(并且没有办法在所有情况下都可靠地获得该编码:有一些字节序列是有效的,并且用各种编码以不同方式解释 )。

(注意HTTP 协议提到并明确了编码)

在 2017 年,最好使用 UTF-8 everywhere(您应该关注 http://utf8everywhere.org/ 链接)所以请您的人类伙伴向您发送 UTF-8(希望您的大多数文件都是 UTF-8,因为今天他们都应该是)。

(所以编码更多的是一个社交问题而不是技术问题)

我得到随机编码格式的文本文件

请注意,“随机编码”不存在。您想要并且需要找出该文件的提供者使用了什么character encoding(和file format)(所以您的意思是“未知编码”,而不是“随机”编码)。

顺便说一句,您是否对text file 有正式、明确、合理和精确 的定义,除了没有零字节的文件,或只有很少控制字符的文件吗? LaTeXC 源、MarkdownSQLUUencodingsharXPMHTML 文件都是文本文件,但非常不同! p>

您可能希望使用 UTF-8,并且您可能会使用 file extension 作为一些提示。了解media-type 会有所帮助。

(因此,如果已使用 HTTP 传输文件,请务必保留(并信任)Content-Type...;阅读有关 HTTP headers 的信息)

[...] 则生成不正确的文件。

您如何知道生成的文件不正确?您只能知道您是否对该结果有一些期望(例如,它包含俄罗斯诗歌,而不是垃圾字符;但也许这些垃圾字符对于某些秘密翻译来说是一些bytecode,或者一些以奇怪的方式表示或加密的音乐,等等....)。原始文件只是字节序列,您需要一些额外的知识才能使用它们(即使您知道它们使用 UTF-8)。

【讨论】:

  • file 命令仅返回 dataregular fileascii。所以我需要确定输入文件的编码。
  • 你不能确定。您需要询问提供文件的人使用了什么编码。或者您可以尝试多种编码,直到您感觉您成功解码了该文件
猜你喜欢
  • 1970-01-01
  • 2014-08-18
  • 2013-09-12
  • 2017-02-01
  • 2010-12-09
  • 1970-01-01
  • 2012-01-25
  • 2023-03-29
  • 1970-01-01
相关资源
最近更新 更多