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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Swoole的多进程模块[通俗易懂]

    Swoole的多进程模块

    2022年2月11日
    51
  • 排序二叉树的建立与中序遍历

    排序二叉树的建立与中序遍历树结构练习——排序二叉树的中序遍历TimeLimit:1000msMemorylimit:65536K有疑问?点这里^_^题目描述在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值(2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值(3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现

    2022年7月25日
    8
  • 选择排序算法(C语言实现)[通俗易懂]

    选择排序算法(C语言实现)[通俗易懂]#include<stdio.h>voidchoice(int*a,intn){inti,j,temp;for(i=0;i<n-1;i++){for(j=i+1;j<n;j++){if(a[i]>a[j]){…

    2022年6月25日
    26
  • SVN版本库修改URL路径或者IP地址

    SVN版本库修改URL路径或者IP地址

    2021年9月21日
    76
  • Go语言开发环境_如何搭建语言培训平台

    Go语言开发环境_如何搭建语言培训平台前言:在《高效能人士的七个习惯》一书中有这么一句话“学而不做等于没学,知而不做等于无知”,所以学习一门新语言光看是不行的,必须身体力行才可以,如果不实践的话最终也只是无知的状态。对于学习语言来说,“做”对应的是编码、调试、运行等,在进行这些工作之前,我们必须安装好编码和调试用的编辑器,运行所需的环境等,这篇文章便是和大家介绍关于go语言开发的环境搭建。一、安装go语言开发包1….

    2022年10月12日
    3
  • 国产ARM核心工控主板介绍

    国产ARM核心板有哪些型号和作用?专业工控机品牌承诺,高性能,低功耗,提供专业定制。工控机箱的抗震:工控机箱在工作的时候,由于机箱内部的光驱、硬盘在高速运转的时候都会产生震动,而震动很容易导致光盘读错和硬盘磁道损坏以至丢失数据,所以工控机箱的抗震性也是我们机箱关键的一个结构设计方案。因为考虑到工控机箱的抗腐蚀、导电、导热等的内部要求,我们的工控机箱减震系统全部采用金属材料制成,这比起用橡胶材料做…

    2022年4月9日
    364

发表回复

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

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