我有一个要求,客户端将提供编码ANSI的文件,但我的系统只能成功读取UNICODE中的文件。那么我该如何解决这个问题呢?我知道当我“保存为”文件为UNICODE编码时,文件被拾取。很难让客户遵守我们的要求。那么我可以为此文件夹设置任何批处理程序,将此文件转换为UNICODE,然后选择吗?
答案 0 :(得分:17)
iconv
可以做到这一点:
Usage: iconv [OPTION...] [FILE...]
Convert encoding of given files from one encoding to another.
Input/Output format specification:
-f, --from-code=NAME encoding of original text
-t, --to-code=NAME encoding for output
Information:
-l, --list list all known coded character sets
Output control:
-c omit invalid characters from output
-o, --output=FILE output file
-s, --silent suppress warnings
--verbose print progress information
-?, --help Give this help list
--usage Give a short usage message
-V, --version Print program version
Mandatory or optional arguments to long options are also mandatory or optional
for any corresponding short options.
For bug reporting instructions, please see:
<http://www.gnu.org/software/libc/bugs.html>.
答案 1 :(得分:10)
ANSI和Unicode都不是编码。您必须先知道输入文件的ANSI代码页和Unicode编码(UTF8或UTF16 - LE或BE),然后才能使用其中一种建议的工具(例如iconv)
答案 2 :(得分:5)
recode可以胜任。
答案 3 :(得分:4)
您还可以在python中轻松转换编码:
inf = open("infile.txt")
data = inf.read().decode("latin1")
inf.close()
outf = open("outfile.txt", "w")
outf.write(data.encode("utf-8"))
outf.close()
答案 4 :(得分:3)
这是一个Powershell解决方案
$lines = gc "pathToFile"
$lines | out-file -enconding Unicode
答案 5 :(得分:2)
您可以创建一个简单的shell脚本(txt_convert.sh <infile> <outfile>
):
#!/bin/sh
iconv -f `file -b --mime-encoding "$1"` -t utf8 "$1" -o "$2"
或只是使用:
iconv -f `file -b --mime-encoding "<infile>"` -t utf8 "<infile>" -o "<outfile>"
说明:'file'命令将确定输入文件的编码,该输入文件将用作'iconv'的输入编码参数,在这种情况下将转换为utf8(你可以用任何东西替换utf-8)您喜欢的输出字符集和iconv支持(参见:iconv -l)
答案 6 :(得分:1)
我浏览了上面提到的一些工具,其中许多都需要命令行。
我找到了一种更简单的方法来转换 Windows 中的文件。
安装 Notepad2 (http://www.flos-freeware.ch/)。它是开源的,免费的。
打开文件使用ANSI编码,
双击&#34; ANSI&#34;在底部的话,
选择新的编码,例如&#34; utf8&#34;
保存文件。
只需点击几下即可完成工作。
另外,您可以轻松查看内容,以便仔细检查。
Notepad2与Notepad相比有各种优势。突出显示的代码,撤消/重做等
:d
答案 7 :(得分:0)
Ruby oneliner,fwiw:
ruby -e 'STDOUT.write STDIN.read.force_encoding(Encoding::WINDOWS_1252).encode!(Encoding::UTF_8)' < infile.csv > outfile.csv
如果您的输入文件很糟糕,您可能需要在Ruby脚本的前面添加STDIN.binmode; STDOUT.binmode;
。