使用utl_file.get_line过程读取记事本文件中的字符时会转换为特殊字符

时间:2017-07-13 10:52:03

标签: oracle oracle11g plsqldeveloper non-ascii-characters

我编写了一个程序,用于从文本文件中读取数据,并使用oracle中的UTL_FILE包将其加载到表中。在阅读几行时,某些字符会转换为特殊字符,例如:

string in file = 63268982_GHC –EXH PALOMARES EVA 
value entered into database = 63268982_GHC âEXH PALOMARES EVA

我尝试使用转换功能,但它没有实现任何目标。

我的Oracle版本是11gR2,它使用的是nls字符集WE8ISO8859P1。因为这些字符串代表物理文件名,所以当我尝试与文件名匹配时,我得到了不匹配。

我尝试将WE charset中存储在Oracle中的值重新转换回ascii,如下所示:

convert('63268989_GHC âEXH PALOMARES','us7ascii','WE8ISO8859P1')

但结果与阅读时文本文件中的结果不同。任何人都可以建议如何克服这个问题。

1 个答案:

答案 0 :(得分:0)

文件中的字符不是常规连字符(-chr(45)),而是En Dash / U+2013存储为三个字节,十进制226,128,147或十六进制e2,80,93。单独解释而不是单个多字节字符,这些字符对应–,如here所示。

尝试使用utl_file.fopen_nchar打开文件并阅读utl_file.get_line_nchar行。

Oracle 11gR2 Database Globalization Support Guide: Programming with Unicode.

相关问题