如何将Big5编码的txt文件转换为UTF8编码的txt文件?

3

我有一个使用Big5编码的文件,无法在Mac TextEdit中打开。我想知道如何将整个文件转换为utf8编码,因为utf8更加通用和普遍。

我尝试在终端中使用iconv进行转换,但它无法正常工作。我也通过谷歌搜索未能找到任何有用的关于这个错误的信息。

$ iconv -f BIG5 -t UTF8 in.txt > out.txt
iconv: in.txt:5:0: cannot convert

还有其他的转换方式吗?

我从这里得到了txt文件,其中包含用台湾繁体中文书写的中国姓名列表。


是哪种格式?我需要读取完全相同的文件。 - Steve Hanov
@SteveHanov 这是 Big5 编码。 - Jay Wang
1个回答

7

看一下文件的前20行,可以清楚地看到编码使用0x8C作为某些多字节序列的第一个字节。具有这种属性的编码包括:

  • BIG5
  • BIG5-HKSCS
  • CP932
  • CP936
  • CP949
  • CP950
  • GB18030
  • GBK
  • JOHAB
  • Shift_JIS
  • Shift_JISX0213

请依次尝试它们:

$ for encoding in BIG5 BIG5-HKSCS CP932 CP936 CP949 CP950 GB18030 GBK \
                  JOHAB Shift_JIS Shift_JISX0213; do \
  if head -n 20 < unique_names_2012.txt | iconv -f $encoding -t UTF-8 > /dev/null 2> /dev/null; then \
    echo $encoding ; \
  fi; \
done

使用GNU libiconv,它会打印出:
BIG5-HKSCS
CP950
GB18030

它是以GB18030编码吗?

$ iconv -f GB18030 < unique_names_2012.txt

显示了数百行使用PUA范围内字符的内容。虽然不是不可能,但似乎不太可能。

它是否采用CP950编码?

$ iconv -f CP950 < unique_names_2012.txt

第 2294 行出现了转换错误。

它是否采用 BIG5-HKSCS 编码?

$ iconv -f BIG5-HKSCS < unique_names_2012.txt

在713行出现了转换错误。

因此,很可能该文件是以BIG5的某个变种编码。有许多这样的变种,请参见http://haible.de/bruno/charsets/conversion-tables/Chinese.html。可能是CP950的扩展,也可能是BIG5-HKSCS的扩展(因为这些今天是BIG5家族中最流行的编码)。

总之,这种转换错误是由于BIG5变体的非标准化扩散造成的。

您可以做的最好的事情就是请求以UTF-8编码格式获取原始文件; 让发件人处理它。


谢谢,这真的帮了很多! - Jay Wang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接