设为首页  
联系我们  
加入收藏  
网页制作 冲浪宝典 图形图像 操作系统 软件教学 编程开发 认证考试 安全技术 站长专区 文学驿站 娱乐天地 游戏天地 办公软件
文章搜索
您的位置: 首页 >> 文章首页 >> 编程开发 >> 其他开发语言 >> 系统区域为非中文(比如英文)的情况下,执行MultiByteToWideChar失败
精品推荐
其他开发语言点击TOP10
·数字小键盘指法练习
·用C语言编通讯录程序(初学者级别的)
·Modem 常用AT指令集
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
·Thinking in C++ 简体中文第二版
·debug和release的区别
·error LNK2001: unresolved external symbol __ftol2 错误解决
·C库函数手册
·一个简单的C语言编译器
编程开发点击TOP10
·数字小键盘指法练习
·ASP.NET 程序中常用的三十三种代码
·用C语言编通讯录程序(初学者级别的)
·我写的Java学生成绩管理系统源代码
·CHK文件恢复工具
·Modem 常用AT指令集
·java笔试题
·异常java.sql.SQLException: Io exception:The Network Adapter could not establish connection
·单片机模拟I2C总线及24C02(I2C EEPROM)读写实例(源代码)
·C++经典电子书下载
精选专题

系统区域为非中文(比如英文)的情况下,执行MultiByteToWideChar失败

作者: 来源:网络文章 时间:2005-12-16 22:42:22

问题描述:
  在wince下,中文字体和环境都设置好,但是系统区域为非中文(比如英文)的情况下,执行MultiByteToWideChar失败

解决过程:
  首先是之前使用的方法:
UINT WChar2Char(LPCWSTR pwszSrc, LPSTR pszDst)
{
  return WideCharToMultiByte( CP_ACP, 0, pwszSrc, -1, pszDst, MAX_PATH, NULL, NULL );
}

UINT Char2WChar(LPCSTR pszSrc, LPWSTR pwszDst)
{
  return MultiByteToWideChar( CP_ACP, 0, pszSrc, -1, pwszDst, MAX_PATH );
}

在描述中的环境下执行Char2WChar并不是总是失败,内置字符转换就没有问题,比如:
char s[10] = "测试";
TCHAR ws[10];
Char2WChar(s, ws);
估计是因为在evc编译的时候已经将char转换为unicode,或者是由于编译的时候codepage已经为936,具体的原因需要调试,有兴趣的可以自己做实验

失败的情况是从数据库中读取一段字串,并进行转换,此时必定错误。由于此时从数据库中读取的是真正的ansi,所以和上面所说的情况不一样。此时debug一下Char2WChar会发现转换失败。下面是用evc跟踪的结果,第一列是ansi字符串,第二列是区域为中文的正常情况下转换出的字符串,第三列是英文环境下转换出的字符串,字符串是"管理员"三个字:
汉字ansiRPCEN
管b9dc7ba100b9 00dc
理c0ed740600c0 00ed
员d4b1545800d4 00b1

可以看到,最后一种情况下转换的结果只是做了一些简单的变换,并没有转出来,原因是什么呢,主要是WideCharToMultiByte的第一个参数codepage造成的,如前面所使用的CP_ACP所表达的意思是使用系统字符集转换,但是由于此时的系统字符集为英文,在这个codepage中并没有中文,所以转换出错,那么最后的答案就很简单了:
UINT WChar2Char(LPCWSTR pwszSrc, LPSTR pszDst)
{
return WideCharToMultiByte(936, 0, pwszSrc, -1, pszDst, MAX_PATH, NULL, NULL);
}

UINT Char2WChar(LPCSTR pszSrc, LPWSTR pwszDst)
{
return MultiByteToWideChar(936, 0, pszSrc, -1, pwszDst, MAX_PATH);
}

最后再看看codepage的定义:

定义描述
874Thai
932Japan
936Chinese (PRC, Singapore)
949Korean
950Chinese (Taiwan; Hong Kong SAR, PRC)
1200Unicode (BMP of ISO 10646)
1250Windows 3.1 Eastern European
1251Windows 3.1 Cyrillic
1252Windows 3.1 Latin 1 (US, Western Europe)
1253Windows 3.1 Greek
1254Windows 3.1 Turkish
1255Hebrew
1256Arabic
1257Baltic


简单吧?


系统区域为非中文(比如英文)的情况下,执行MultiByteToWideChar失败 相关文章:
系统区域为非中文(比如英文)的情况下,执行MultiByteToWideChar失败 相关软件:
特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
转载请注明来源:http://www.xgdown.com