我使用以下代码写入Oracle PL / SQL中的文件。
l_file := utl_file.fopen('HR_OUT', 'TRUMEDAID.txt', 'w');
utl_file.put_line
(
l_file,
utl_raw.cast_to_varchar2
(
utl_raw.convert
(
utl_raw.cast_to_raw(rec_text),
'AMERICAN_AMERICA.WE8ISO8859P1', -- To character set.
'AMERICAN_AMERICA.AL32UTF8' -- From Character set.
)
)
);
但是,这不会丢弃UTF-8字符,而是会将Pamêla&~
翻译为Pam�&~
。还有另一种方式至少会给Pam�la&~
吗?为什么不使用ascii角色?
答案 0 :(得分:1)
不确定为什么要投射到RAW并再次返回。您可以使用CONVERT功能。输入字符串可以是CHAR,VARCHAR2,CLOB等。请参阅:http://docs.oracle.com/cd/B28359_01/server.111/b28286/functions027.htm#SQLRF00620
您只需指定目标字符集,因为它将数据库字符集作为默认源。
此外,在这些情况下,永远不要相信所产生的字母串。使用dump()函数调查组成字符串的字节值。这样,您可以确定字符串是否由正确的值组成。
答案 1 :(得分:0)
select utl_raw.cast_to_varchar2
(
utl_raw.convert
(
utl_raw.cast_to_raw(first_name),
'AMERICAN_AMERICA.US7ASCII', -- To character set.
'AMERICAN_AMERICA.AL32UTF8' -- From Character set.
)
)
from per_all_people_f
where employee_number = '212164'
为我工作