西里尔字符在Oracle上的XML中显示不正确

bprjcwpo  于 2023-08-04  发布在  Oracle
关注(0)|答案(1)|浏览(89)

DB Oracle 19c
NLS:
| 价值| VALUE |
| --| ------------ |
| AL16UTF16| AL16UTF16 |
| AL32UTF8| 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,则字符串会中断。

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(),但它没有帮助。

deikduxw

deikduxw1#

数据库NLS_CHARACTERSET只是其中的一部分。您还需要告诉数据库您的客户端使用的字符集。除非你有一个基于Java/JDBC的客户端,否则这通常是通过环境变量NLS_LANG来完成的。
请参阅OdbcConnection返回的中文字符为“?“

相关问题