C++ gbk与utf8互转

C++ gbk与utf8互转本文代码已在 vs2017 上验证 gbk 转 utf8 容易出现中文乱码 有的时候在 x8632 位编译环境下中文显示正常 但切换到 x6464 位编译环境下会乱码 本文所示的代码在 32 位和 64 位编译环境下均不会出现乱码 使用例子见 include iostream include stdlib h include string include string h include windows h usingnames windows h string h string stdlib h iostream

本文代码已在vs2017上验证。gbk转utf8容易出现中文乱码,有的时候在x86 32位编译环境下中文显示正常,但切换到x64 64位编译环境下会乱码。本文所示的代码在32位和64位编译环境下均不会出现乱码。使用例子见:C++ 调用python。

#include <iostream> #include <stdlib.h> #include <string> #include <string.h> #include <windows.h> using namespace std; string GBK_2_UTF8(string gbkStr) { string outUtf8 = ""; int n = MultiByteToWideChar(CP_ACP, 0, gbkStr.c_str(), -1, NULL, 0); WCHAR *str1 = new WCHAR[n]; MultiByteToWideChar(CP_ACP, 0, gbkStr.c_str(), -1, str1, n); n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL); char *str2 = new char[n]; WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL); outUtf8 = str2; delete[]str1; str1 = NULL; delete[]str2; str2 = NULL; return outUtf8; } string UTF8_2_GBK(string utf8Str) { string outGBK = ""; int n = MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, NULL, 0); WCHAR *str1 = new WCHAR[n]; MultiByteToWideChar(CP_UTF8, 0, utf8Str.c_str(), -1, str1, n); n = WideCharToMultiByte(CP_ACP, 0, str1, -1, NULL, 0, NULL, NULL); char *str2 = new char[n]; WideCharToMultiByte(CP_ACP, 0, str1, -1, str2, n, NULL, NULL); outGBK = str2; delete[] str1; str1 = NULL; delete[] str2; str2 = NULL; return outGBK; }

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233976.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C语言中动态分配数组

    C语言中动态分配数组很多人在编写C语言代码的时候很少使用动态数组,不管什么情况下通通使用静态数组的方法来解决,在当初学习C语言的时候我就是一个典型的例子,但是现在发现这是一个相当不好的习惯,甚至可能导致编写的程序出现一些致命的错误。尤其对于搞嵌入式的人来所,嵌入式系统的内存是宝贵的,内存是否高效率的使用往往意味着嵌入式设备是否高质量和高性能,所以高效的使用内存对我们来说是很重要的。那么我们在自己编写C语言代码的时候就…

    2022年7月22日
    6
  • ICMP 协议「建议收藏」

    ICMP 协议「建议收藏」一、什么是ICMP协议?ICMP(InternetControlMessageProtocol)Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP使用IP的基本支持,就像它是一个更高级别…

    2022年10月23日
    0
  • mysql jdbc 连接

    mysql jdbc 连接

    2021年5月5日
    104
  • net 开源「建议收藏」

    net 开源「建议收藏」开源GIS项目NASAWorldWindNASAWorldWind是使用.NET开发的一个Windows窗体系统,以地球外观看得角度提供全球定位功能,类似于GoogleEarth。它结合了美国国家航空航天局(NASA)从卫星拍摄的图像,这些图像应用于BlueMarble,Landsat7,SRTM,MODIS以及其它更多的地方。链接:http://www.worldw

    2022年7月15日
    12
  • Graphics2D绘制多图片水印方法

    /***@paramsrcPath需要添加水印的完整地址*@paramids需要添加的水印的id集合,结果以”,”分隔*@return返回包含水印图片的输入流*@throwsException*/publicInputStreamaddWatermark(StringsrcPath,Str…

    2022年4月13日
    46
  • 阿里云Redis开发规范

    阿里云Redis开发规范

    2021年7月4日
    64

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号