How to convert Utf8 file to CP1252 by Unix
我正在尝试将txt文件编码从UTF8转换为ANSI(cp1252)。
我需要这样做是因为该文件在固定位置的Oracle导入(外部表)中使用,该导入显然仅支持CP1252。 如果导入UTF-8文件,则某些特殊字符会变成两个不正确的字符。
我在Unix机器上工作(我的操作系统是HP UX)。 我一直在网上寻找答案,但找不到任何方法来进行这种转换。
例如,POSIX
如何通过UNIX将文件转换为CP1252?
如果您的UTF-8文件仅包含也可以表示为CP1252的字符,则应该能够执行转换。
1 | iconv -f utf-8 -t cp1252 <file.utf8 >file.txt |
但是,如果UTF-8文本包含一些不能用CP1252表示的字符,则有两种选择:
- 仍然进行转换,并让转换器忽略有问题的字符
- 仍然进行转换,并让转换器替换有问题的字符
这应该是一个有意识的选择,因此,开箱即用
1 2 3 4 5 6 7 8 9 | bash$ echo 'x≠y' | iconv -f utf-8 -t cp1252 x iconv: (stdin):1:1: cannot convert bash$ echo 'x≠y' | iconv -f utf-8 -t cp1252 -c xy bash$ echo 'x≠y' | iconv -f utf-8 -t cp1252 --unicode-subst='?' x?y |
这是在OS X上;显然,Linux
1 2 3 4 | #!/usr/bin/env python import sys for line in sys.stdin: print(line.decode('utf-8').encode('cp1252', 'replace')) |
将
看看这个Java转换器:native2ascii
它是JDK安装的一部分。
转换分为两个步骤:
1 2 | native2ascii -encoding UTF-8 <your_file.txt> <your_file.txt.ascii> native2ascii -reverse -encoding windows-1252 <your_file.txt.ascii> <your_file_new.txt> |
在UTF-8中使用但在CP1252中不支持的字符(包括BOM)被替换为