`
574965385
  • 浏览: 7974 次
  • 性别: Icon_minigender_1
  • 来自: 西安
最近访客 更多访客>>
社区版块
存档分类
最新评论

vc本地编码程序在日文系统出现乱码无法使用的解决办法

    博客分类:
  • C++
阅读更多
去年用vc给客户开发了一套基于pdf文档的数字图书馆,界面显示都是古汉语,要求支持unicode5.0标准,在页面上能显示7万多汉字,包括四字节汉字,终于在费了九牛二虎之力后在中文操作系统下没有任何问题。
    今年客户要卖给日本用户 ,因为编程用的好多技术都来源于原来的一个开发项目,基于多字节的编码,也就是本地编码,在日文系统下显示汉字就成了乱码。在日文系统下把语言环境修改成中文就没有任何问题,但是日本人不愿意。
     怎么解决这个问题,把程序的编码转换成unicode编码,是一个办法,但是非常麻烦,包括加密系统在内的都要转换,绝对是一个杯具了。在网上查询后,有价值的资料不多。经过自己的多次试验终于解决了这个问题,现在拿出来跟大家分享一下,如果碰到与我有同样困扰的朋友,相信还是有参考价值的。
      我的解决思路是,将软件中需要显示的中文转成UTF-8编码,然后再转Unicode编码,用unicode编码再转为系统的本地编码,非常简单,原来的程序几乎不需要修改多少,就把问题解决了。
     转换代码想必大家应该比较熟悉了,就是用API函数 MultiByteToWideChar了。


// UTF8转换为Unicode字符串,再转本地字符串
//szchar待转换的汉字的utf-8编码字符串
//wszUniCode 转换后的Unicode编码字符串
CString CDemoView::UTF8ToUni(char* szchar)
{
  //先计算转换后的unicode字符串的长度
int len;
len = MultiByteToWideChar(CP_UTF8, 0, szchar, -1, NULL,0);
  // 分配Unicode字符串缓冲区,并赋0
wchar_t* wszUniCode = new wchar_t[len+1];
memset(wszUniCode, 0, len * 2 + 2);
  // 转换过程
MultiByteToWideChar(CP_UTF8, 0, szchar, -1, wszUniCode, len);
  //本地化
CString  str(wszUniCode);
delete[] wszUniCode;
return  str;
}

     代码很简单,主要是提供一种解决思路,我的QQ号:574965385,欢迎与同行者交流。
分享到:
评论

相关推荐

    批量将VC工程相关文件转换为UTF-8编码格式

    在Windows环境下,Visual C++(简称VC)开发的工程文件通常使用ANSI编码,这种编码方式基于本地操作系统默认的字符集,可能会导致在不同地区或者与国际化标准不兼容的问题。因此,将VC工程相关文件转换为UTF-8编码...

    c++ 读写txt文件和乱码问题解决

    当涉及到UTF-8编码时,问题在于C++标准库默认处理的是ASCII编码,这可能导致在读写非ASCII字符(如中文、日文等多字节字符)时出现乱码。为了解决这个问题,你需要确保正确地指定文件的编码格式。 在读取UTF-8编码...

    vc_mbcsmfc多字符集支持库

    "vc_mbcsmfc多字符集支持库"可能是为了解决这一需求,提供了一种工具或方法,帮助开发者在VS2013下构建支持MBCS的MFC项目。 使用这个支持库时,开发者需要注意以下几点: 1. **编码转换**:在处理MBCS字符串时,...

    VC6.0 MFC的Unicode Lib文件

    在Windows编程中,Unicode是一种广泛使用的字符编码标准,它能够处理世界上几乎所有的文字系统。Microsoft Visual C++ 6.0(简称VC6.0)是一款经典的集成开发环境,尽管已被更新版本取代,但仍然有开发者在使用它...

    在vs2013中默认不再包含对多字节字符编码的支持

    4. **测试**:进行充分的测试,确保在MBCS环境下程序的功能正确无误,避免出现乱码或其他兼容性问题。 标签“源码 工具”表明这个话题可能涉及到源代码管理和开发工具的使用,特别是在处理MBCS编码时如何选择合适的...

    vc可操作Excel的类

    在编程中,使用Unicode可以确保程序在处理不同语言的文本时不会出现乱码问题。在Visual C++(vc)中,Unicode是通过宽字符(wchar_t)类型来实现的,它可以正确地表示和处理中文字符。 在"vc可操作Excel的类"中,...

    VC++ UNICODE

    【VC++ UNICODE】是指在Microsoft Visual C++环境下使用Unicode编码进行程序开发的技术。Unicode是一种国际标准,用于表示世界上几乎所有的文字和符号,包括中文、英文、日文等,旨在解决不同语言文字编码的冲突问题...

    Big5码 转 GBK 内码

    这个VC工程就是为了解决这个问题,将使用Big5编码的文本转换成GBK编码,以便在GBK支持的环境下正常显示和处理。 4. **VC工程**:Visual C++是微软开发的一款集成开发环境(IDE),用于编写使用C++语言的应用程序。...

    【转】IPMsg-多语言支持版(RTF版)

    (VC6编译) <br>使用RTF格式解决在日文Windows下发送接受中文消息问题。 不过由于使用RTF,所以发送消息给其它版本的IPMsg时(比如Linux下的),对方将无法显示。 此时可以把RTF复选框去掉,不发送RTF格式...

    vc_mbcsmfc

    如果你的项目设置为使用非Unicode字符集,可能会导致字符串处理错误、乱码或者在国际化环境下无法正确显示字符。 解决这个问题的步骤如下: 1. 打开Visual Studio 2013,然后加载你的MFC项目。 2. 转到“项目”...

    VS2013多字节(MFC)补丁

    该补丁的主要目的是提高VS2013中MFC库的稳定性和性能,确保在开发多字节字符集应用程序时能正确处理各种字符,避免出现乱码或者其他运行错误。开发者在遇到与多字节字符集相关的编译或运行问题时,可以考虑安装这个...

    VC++ String

    在深入探讨VC++中的各种字符串类型之前,我们首先需要理解字符编码的基础概念,尤其是Win32环境下所使用的几种不同的编码方式。这部分将涵盖ASCII、DBCS(双字节字符集)以及Unicode的基本原理及其在内存中的存储...

    易语言程序免安装版下载

    修改XP风格支持库,解决GDI资源泄露,以及在使用通用组件库六时组合框标题出现重影的BUG。 5. 修改扩展界面支持库一,解决树形框项目无法通过鼠标点击进入编辑状态的BUG。 6. 修改高级表格支持库,解决插入行/...

    mfc42u.lib

    在C++中,使用Unicode可以处理各种语言的字符串,包括但不限于英文、中文、日文等,避免了多字节编码可能导致的问题,如乱码。 "vc6.0 库" 表明这是针对Visual C++ 6.0 版本的库。Visual C++是微软提供的一个集成...

Global site tag (gtag.js) - Google Analytics