Web services receives text data, data error
I use the InterSystems cache to implement a web services program. I receive the data sent by the other person. However, I receive the wrong text (the normal text is the question mark "??????"). The other party uses the gbk code to send Chinese. The other party cannot modify the gbk code, what should I do to receive normal Chinese text? Thank you.
I use ensemble 2010 and ensemble 2016.
Comments
1) install gbk character set table to your instance (if available)
??? ....\InterSystems\Cache\mgr\Locale\allmessages_zh-cn.xml ???
2) use $zconvert() to translate it.
if 1) fails you may trigger an external converter using $ZF(-2 ,....)
or use command pipe to run an external conversion.
Where can I download allmessages_zh-cn.xml? Or is there an example file? Thanks
the file comes with the standard Caché /Ensenble distribution kit and should be installed
At least in a UNICODE installation. I verified it for 2016.2 and later. But it should be here even earlier.
I should add that I have no idea if iths is the right one. It is just the only one for Chinese I know of.
If you miss it you should contact WRC.
What's your current locale? If it's not Chinese you may want to change it. Note that it significantly affects system behavior and you should understand the implications in such a change.
???? often indicates the data loss during encoding conversions consider this Cyrillic example:
set t = "Привет" USER>zzdump t 0000: 041F 0440 0438 0432 0435 0442 Привет USER>zzdump $zcvt(t, "I", "UTF8") 0000: 3F 3F 3F 3F 3F 3F ?????? USER>zzdump $zcvt(t, "O", "UTF8") 0000: D0 9F D1 80 D0 B8 D0 B2 D0 B5 D1 82 Ð.Ñ.ивеÑ.
Note the difference between question marks and the last output. Last output is just encoding translation, but the first conversion - into questions completely lost the information, so you need to look deeper.
You can try to modify TCP/IP IO table via ^NLS utility in %SYS namespace
do ^NLS 1) Display current locale 2) Select defaults 3) Change locale 4) Display loaded settings 5) Advanced NLS option? 2 1) Internal tables 2) I/O tables 3) CSP files 4) Date, time and number formats Category of defaults? 2 Items marked with (*) represent the locale's original default I/O table Current default --------------------- -------------------- 1) Process RAW (*) 2) Cache Terminal UTF8 (*) 3) Other terminal UTF8 (*) 4) File UTF8 (*) 5) Magtape UTF8 (*) 6) TCP/IP RAW (*) 7) System call RAW (*) 8) Printer CP1251 (*) I/O table: 6 1) RAW (*) 2) UTF8 3) UnicodeLittle 4) UnicodeBig 5) CP1250 6) CP1251 7) CP1252 8) CP1253 9) CP1255 10) CP866 11) CP874 12) EBCDIC 13) KOI8R 14) Latin2 15) Latin9 16) LatinC 17) LatinG 18) LatinH 19) LatinT Selection for TCP/IP: 1 =>