我最近遇到一个问题,开发的ERP有香港同事要用,结果那边繁体系统一遇到简体字就显示成为?号。百般折腾,最后得出一个方法,只要SQL的简体字全部转成繁体,就能正常显示。当然,界面也需要换成纯英文或者繁体,总之在繁体系统下一定不能出现简体,否则就出错。
大陆同事录入的时候,需要将简体转繁体到对应的表供香港同事查询,我用了很多方法,基本上CSDN上的东西我都下载了,全部都不行。最后在梅子论坛上看到 都市夜猫的代码。是目前唯一不出问题的。转载下载,供大家学习改进。
代码来自:http://www.mzvfp.com/forum/read.php?tid=66467
CLEAR
m.sss = ' 大陆/台湾字体编码(简繁)转换, OK!'
decl_winapi()
m.big5 = gb2big( m.sss )
m.gb_t = big2gb( m.big5, .F. )
m.gb_s = big2gb( m.big5, .T. )
? 'BIG5 码:', CHR(9), CHR(9), m.big5
? '转回 GB 码(繁体):', CHR(9), m.gb_t
? '转回 GB 码(简体):', CHR(9), m.gb_s
RETURN
#define SIMPLIFIED 0x02000000 && map traditional chinese to simplified chinese
#define TRADITIONAL 0x04000000 && map simplified chinese to traditional chinese
PROCEDURE decl_winapi
DECLARE Long LCMapString IN WIN32API ;
Long Locale, ; && locale identifier
Long dwMapFlags, ; && mapping transformation type
String lpSrcStr, ; && address of source string
Long cchSrc, ; && number of characters in source string
String @ lpDestStr, ; && address of destination buffer
Long cchDest && size of destination buffer
ENDPROC
FUNCTION big2gb( tcString, tlT2S )
LOCAL iLen, cBuff_WT, cBuff_AT, cBuff_AS
m.cBuff_WT = STRCONV( m.tcString, 5, 950, 1 )
m.cBuff_AT = STRCONV( m.cBuff_WT, 6, 936, 1 )
IF ( m.tlT2S )
m.iLen = LEN( m.cBuff_AT )
m.cBuff_AS = REPLICATE( CHR(0), m.iLen )
LCMapString( 0x0804, SIMPLIFIED, m.cBuff_AT, m.iLen, @ m.cBuff_AS, m.iLen )
RETURN m.cBuff_AS
ELSE
RETURN m.cBuff_AT
ENDIF
ENDFUNC
FUNCTION gb2big( tcString )
LOCAL iLen, cBuff_AT, cBuff_WT
m.iLen = LEN( m.tcString )
m.cBuff_AT = REPLICATE( CHR(0), m.iLen )
LCMapString( 0x0804, TRADITIONAL, m.tcString, m.iLen, @ m.cBuff_AT, m.iLen )
m.cBuff_WT = STRCONV( m.cBuff_AT, 5, 936, 1 )
RETURN STRCONV( m.cBuff_WT, 6, 950, 1 )
ENDFUNC