提问人:Gontar 提问时间:7/10/2023 最后编辑:marc_sGontar 更新时间:7/10/2023 访问量:50
西里尔字符在 Oracle 上的 XML 中无法正确显示
Cyrillic characters are not displayed correctly in XML on Oracle
问:
我有 DB Oracle 19c。
NLS:
参数 | 价值 |
---|---|
NLS_NCHAR_CHARACTERSET | AL16UTF16 |
NLS_CHARACTERSET | AL32UTF8 |
创建 XML:
SELECT xmlroot(xmlagg(xmlelement("MA",
xmlforest(1 "STATUS",
v.app_type "APP_TYPE",
v.fname "FNAME",
v.pname "PNAME",
v.lname "LNAME",
v.dob "DOB",
v.dob_od "DOB_OD",
v.pob "POB",
v.inc_tm "INC_TM",
v.gender "GENDER",
v.educ_lvl "EDUC_LVL",
v.marit_st "MARIT_ST",
v.kids "KIDS"))),
version '1.0" encoding="UTF-8') AS xml
FROM nh_data_vector v
WHERE v.id_nh = 1
XML 已正确创建并显示。
如果我使用 xmlserialize 和 make blob,那么 сyrillic 字符会中断。
SELECT xmlserialize(document xmlroot(xmlagg(xmlelement("MA",
xmlforest(1 "STATUS",
v.app_type "APP_TYPE",
v.fname "FNAME",
v.pname "PNAME",
v.lname "LNAME",
v.dob "DOB",
v.dob_od "DOB_OD",
v.pob "POB",
v.inc_tm "INC_TM",
v.gender "GENDER",
v.educ_lvl "EDUC_LVL",
v.marit_st "MARIT_ST",
v.kids "KIDS"))),
version '1.0" encoding="UTF-8') AS BLOB encoding 'UTF-8'
version '1.0') AS xml
FROM nh_data_vector v
WHERE v.id_nh = 1
<MA>
<STATUS>1</STATUS>
<APP_TYPE>4</APP_TYPE>
<FNAME>Р”РњР˜РўР Р˜Р™</FNAME>
<PNAME>Р’Р›РђР”Р˜РњР˜Р РћР’Р˜Р§</PNAME>
<LNAME>Р—Р˜РњР˜Рќ</LNAME>
<DOB>1991-11-20</DOB>
<DOB_OD>1991-11-20</DOB_OD>
<POB>ГОР.САРАТОВ</POB>
<INC_TM>100000</INC_TM>
<GENDER>1</GENDER>
<EDUC_LVL>3</EDUC_LVL>
<MARIT_ST>1</MARIT_ST>
<KIDS>0</KIDS>
</MA>
在线使用解码器,我看到编码 Windows-1251。但是我如何获得这种编码呢?我需要使用 UTF-8。
我正在使用 ,但它没有帮助。convert()
答:
0赞
Wernfried Domscheit
7/10/2023
#1
数据库只是其中的一部分。您还需要告诉数据库您的客户端使用哪个字符集。除非您有基于 Java/JDBC 的客户端,否则这通常由 环境变量 完成。NLS_CHARACTERSET
NLS_LANG
评论
'ДМИТРИЙ ВЛАДИМИРОВИЧ ЗИМИН'.encode( 'utf-8').decode( 'cp1251', 'backslashreplace').replace( '\\x98', '˜')
'Р”РњР˜РўР\xa0Р˜Р™ Р’Р›РђР”Р˜РњР˜Р\xa0РћР’Р˜Р§ Р—Р˜РњР˜Рќ'
\xa0
cp1251
˜