SetThreadLocale解决程序乱码问题

中文软件运行在英文系统下,程序支持unicode,但是仍出现乱码。

解决办法:
1.控制面板 ——> 区域和语言选项——>语言——> 附加的语言支持 ——> 将“为东亚语言安装文件” 选中,然后系统自动安装语言包,再次运行程序,显示正常。另:泰国、越南等需要将“复制文字和从右到左的语言安装文件(包括泰文)”选中。

2.程序内部设置区域
 使用SetThreadLocale函数设置运行区域:
【delphi】 SetThreadLocale($0804); 

在工程的开始处,添加以下代码:

//$0804是中文,$0409是英语 - 美国, $042A是越南,其他见附表

if (GetThreadLocale<>$0804)  then //取得当前线程的地方ID 
begin
     SetThreadLocale($0804);              
end;


注:SetThreadLocale与GetThreadLocale是相对应使用的,有朋友在d2007中测试过,SetThreadLocale修改的是control panel 中的区域设置既第一项选项卡中的设置,而非第三项选项卡的设置(第一项选项卡的设置影响的是日期格式,而第三项选项卡的设置影响的才是中英文环境),SetThreadLocale并不能更改系统的语言环境,设置第三选项中语言应用SetLocaleInfo 函数。

3.非程序,如Flash
解决办法是在英语操作系统里面,安装英文版本的Flash制作工具,如 Flash MX
在这个环境里面重新生成之前在中文环境里的flash。
 


区域设置 ID (LCID) 表

区域设置描述简写十六进制值十进制值
南非荷兰语af0x04361078
阿尔巴尼亚语sq0x041C1052
阿拉伯语 - 阿拉伯联合酋长国ar-ae0x380114337
阿拉伯语 - 巴林ar-bh0x3C0115361
阿拉伯语 - 阿尔及利亚ar-dz0x14015121
阿拉伯语 - 埃及ar-eg0x0C013073
阿拉伯语 - 伊拉克ar-iq0x08012049
阿拉伯语 - 约旦ar-jo0x2C0111265
阿拉伯语 - 科威特ar-kw0x340113313
阿拉伯语 - 黎巴嫩ar-lb0x300112289
阿拉伯语 - 利比亚ar-ly0x10014097
阿拉伯语 - 摩洛哥ar-ma0x18016145
阿拉伯语 - 阿曼ar-om0x20018193
阿拉伯语 - 卡塔尔ar-qa0x400116385
阿拉伯语 - 沙特阿拉伯ar-sa0x04011025
阿拉伯语 - 叙利亚ar-sy0x280110241
阿拉伯语 - 突尼斯ar-tn0x1C017169
阿拉伯语 - 也门ar-ye0x24019217
巴斯克语eu0x042D1069
白俄罗斯语be0x04231059
保加利亚语bg0x04021026
加泰罗尼亚语ca0x04031027
中文 - 中华人民共和国zh-cn0x08042052
中文 - 中华人民共和国香港特别行政区zh-hk0x0C043076
中文 - 新加坡zh-sg0x10044100
中文 - 台湾地区zh-tw0x04041028
克罗地亚语hr0x041A1050
捷克语cs0x04051029
丹麦语da0x04061030
荷兰语nl0x04131043
荷兰语 - 比利时nl-be0x08132067
英语 - 澳大利亚en-au0x0C093081
英语 - 伯利兹en-bz0x280910249
英语 - 加拿大en-ca0x10094105
英语 - 爱尔兰en-ie0x18096153
英语 - 牙买加en-jm0x20098201
英语 - 新西兰en-nz0x14095129
英语 - 南非en-za0x1C097177
英语 - 特立尼达岛en-tt0x2C0911273
英语 - 英国en-gb0x08092057
英语 - 美国en-us0x04091033
爱沙尼亚语et0x04251061
波斯语fa0x04291065
芬兰语fi0x040B1035
法罗语fo0x04381080
法语 - 标准fr0x040C1036
法语 - 比利时fr-be0x080C2060
法语 - 加拿大fr-ca0x0C0C3084
法语 - 卢森堡fr-lu0x140C5132
法语 - 瑞士fr-ch0x100C4108
盖尔语 - 苏格兰gd0x043C1084
德语 - 标准de0x04071031
德语 - 奥地利de-at0x0C073079
德语 - 列支敦士登de-li0x14075127
德语 - 卢森堡de-lu0x10074103
德语 - 瑞士de-ch0x08072055
希腊语el0x04081032
Hebrewhe0x040D1037
印地语hi0x04391081
匈牙利语hu0x040E1038
冰岛语is0x040F1039
印度尼西亚语in0x04211057
意大利语 - 标准it0x04101040
意大利语 - 瑞士it-ch0x08102064
日语ja0x04111041
朝鲜语ko0x04121042
拉脱维亚语lv0x04261062
立陶宛语lt0x04271063
马其顿语mk0x042F1071
马来语 - 马来西亚ms0x043E1086
马耳他语mt0x043A1082
挪威语 - 博克马尔no0x04141044
波兰语pl0x04151045
葡萄牙语 - 标准pt0x08162070
葡萄牙语 - 巴西pt-br0x04161046
拉托-罗马语rm0x04171047
罗马尼亚语ro0x04181048
罗马尼亚语 - 摩尔多瓦ro-mo0x08182072
俄语ru0x04191049
俄语 - 摩尔多瓦ru-mo0x08192073
塞尔维亚语 - 塞瑞利克sr0x0C1A3098
Setsuanatn0x04321074
斯洛文尼亚语sl0x04241060
斯洛伐克语sk0x041B1051
索布语sb0x042E1070
西班牙语 - 标准es0x040A1034
西班牙语 - 阿根廷es-ar0x2C0A11274
西班牙语 - 玻利维亚es-bo0x400A16394
西班牙语 - 智利es-cl0x340A13322
西班牙语 - 哥伦比亚es-co0x240A9226
西班牙语 - 哥斯达黎加es-cr0x140A5130
西班牙语 - 多米尼加共和国es-do0x1C0A7178
西班牙语 - 厄瓜多尔es-ec0x300A12298
西班牙语 - 危地马拉es-gt0x100A4106
西班牙语 - 洪都拉斯es-hn0x480A18442
西班牙语 - 墨西哥es-mx0x080A2058
西班牙语 - 尼加拉瓜es-ni0x4C0A19466
西班牙语 - 巴拿马es-pa0x180A6154
西班牙语 - 秘鲁es-pe0x280A10250
西班牙语 - 波多黎各es-pr0x500A20490
西班牙语 - 巴拉圭es-py0x3C0A15370
西班牙语 - 萨尔瓦多es-sv0x440A17418
西班牙语 - 乌拉圭es-uy0x380A14346
西班牙语 - 委内瑞拉es-ve0x200A8202
苏图语sx0x04301072
瑞典语sv0x041D1053
瑞典语 - 芬兰sv-fi0x081D2077
泰语th0x041E1054
土耳其语tr0x041F1055
汤加语ts0x04311073
乌克兰语uk0x04221058
乌尔都语 - 巴基斯坦ur0x04201056
越南vi0x042A1066
科萨语xh0x04341076
意第绪语ji0x043D1085
祖鲁语zu0x04351077



  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值