如何在shell中查找文件编码类型或将任何编码类型转换为UTF-8?

时间:2017-09-20 06:21:01

标签: shell encoding utf-8 sh

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

使用以下命令进行转换

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

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

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

提前致谢

2 个答案:

答案 0 :(得分:3)

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

character encoding是一场噩梦,可能含糊不清。该文件的提供者应该告诉你他使用了什么编码(并且无法在所有情况下可靠地获得该编码:有一些字节序列是有效的并且以不同的编码解释不同 )。

(注意HTTP协议提及并解释编码)

2017年,更好地使用UTF-8 everywhere(您应该遵循http://utf8everywhere.org/链接),请让您的人类合作伙伴向您发送UTF-8(希望您的大多数文件都是UTF-8,因为今天他们都应该是。)

(因此编码更像是社交问题而非技术问题)

  

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

请注意&#34;随机编码&#34;不存在。您希望并且需要找出该文件的提供者使用的character encoding(和file format)(因此您的意思是&#34;未知编码&#34;,不是&#34;随机& #34;一)。

BTW,你有text file的正式,明确,声音和精确定义,超出文件而没有零字节,或者控制字符很少的文件? LaTeXC来源,MarkdownSQLUUencodingsharXPMHTML个文件是所有文本文件,但非常不同!

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

(因此,如果使用HTTP来传输文件,请务必保留(并信任)Content-Type ...;阅读HTTP headers < / p>

  

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

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

答案 1 :(得分:0)

我们用

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

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