我编写了一个程序,用于从文本文件中读取数据,并使用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')
但结果与阅读时文本文件中的结果不同。任何人都可以建议如何克服这个问题。
答案 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.