我所知道的是EBCDIC繁体中文的代码页937。 CP937
我问的原因是我有一个包含繁体中文字符的EBCDIC文件,但是当我使用ZHT16DBCS(代码页937)字符集将它们加载到Oracle时,它们有方框和问号。
附加说明: 我无法处理该文件,因为它在EBCDIC中并包含繁体中文字符。我想将其转换为UTF-8,以便我可以使用我的脚本(Perl)读取并解压缩到几个文件并将文件加载到多个数据库表。
答案 0 :(得分:0)
我不知道IBM代码页CP937
是否与Oracle字符集ZHT16DBCS
匹配。如果Oracle完全支持CP937。
我的建议是转换为更常见的字符集,例如UTF-8。例如,您可以使用native2ascii作为Java SE的一部分。
会是这样的:
native2ascii your_input_file native_file.txt -encoding x-IBM937
native2ascii native_file.txt your_input_file_in_utf8 -reverse -encoding UTF-8
或使用管道一步完成:
cat your_input_file | native2ascii -encoding x-IBM937 | native2ascii -reverse -encoding UTF-8 > your_input_file_in_utf8
然后,在运行sqlldr之前设置NLS_LANG
:
SET NLS_LANG=.AL32UTF8 (Windows)
export NLS_LANG=.AL32UTF8 (Unix)
只是注释,区域和语言不相关,所以如果你愿意,可以跳过它们(就像我一样)。
当然,您必须在控制文件中设置
CHARACTERSET AL32UTF8
另一个注意事项,“UTF-8”编码意味着Oracle字符集“AL32UTF8”。还有一个名为“UTF8”的Oracle字符集,但这是CESU-8。对于欧洲语言,它们可以被认为是平等的,但对于中国人来说,它们可能是不同的。