Web services receives text data, data error


I use the Intersystem 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.

  • 0
  • 0
  • 80
  • 2
  • 2

Answers

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 =>