VS GBK编码和UTF-8编码转换

#include <Windows.h>

// 注释:多字节包括GBK和UTF-8

int GBK2UTF8(char *szGbk,char *szUtf8,int Len)

{

// 先将多字节GBK(CP_ACP或ANSI)转换成宽字符UTF-16

// 得到转换后,所需要的内存字符数

int n = MultiByteToWideChar(CP_ACP,0,szGbk,-1,NULL,0);

// 字符数乘以 sizeof(WCHAR) 得到字节数

WCHAR *str1 = new WCHAR[sizeof(WCHAR) * n];

// 转换

MultiByteToWideChar(CP_ACP,  // MultiByte的代码页Code Page

0,            //附加标志,与音标有关

szGbk,        // 输入的GBK字符串

-1,           // 输入字符串长度,-1表示由函数内部计算

str1,         // 输出

n             // 输出所需分配的内存

);

// 再将宽字符(UTF-16)转换多字节(UTF-8)

n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);

if (n > Len)

{

delete[]str1;

return -1;

}

WideCharToMultiByte(CP_UTF8, 0, str1, -1, szUtf8, n, NULL, NULL);

delete[]str1;

str1 = NULL;

return 0;

}

//UTF-8 GBK

int UTF82GBK(char *szUtf8,char *szGbk,int Len)

{

int n = MultiByteToWideChar(CP_UTF8, 0, szUtf8, -1, NULL, 0);

WCHAR * wszGBK = new WCHAR[sizeof(WCHAR) * n];

memset(wszGBK, 0, sizeof(WCHAR) * n);

MultiByteToWideChar(CP_UTF8, 0,szUtf8,-1, wszGBK, n);

n = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);

if (n > Len)

{

delete[]wszGBK;

return -1;

}

WideCharToMultiByte(CP_ACP,0, wszGBK, -1, szGbk, n, NULL, NULL);

delete[]wszGBK;

wszGBK = NULL;

return 0;

}

时间: 2024-12-25 03:33:35

VS GBK编码和UTF-8编码转换的相关文章

解决Qt中文乱码以及汉字编码的问题(UTF-8/GBK)——ubuntu环境设置默认是utf-8,文件编码可使用Encodersoft批量转换

一.Qt环境设置 文件从window上传到Ubuntu后会显示乱码,原因是因为ubuntu环境设置默认是utf-8,Windows默认都是GBK.Windows环境下,Qt Creator,菜单->工具->选项->文本编辑器->行为->文件编码:默认编码:System(简体中文windows系统默认指的是GBK编码,即下拉框选项里的GBK/windows-936-2000/CP936/MS936/windows-936) 二.编码知识科普Qt常见的两种编码是:UTF-8和GB

(转载)GBK、UTF8、UNICODE编码转换

GBK.UTF8.UNICODE编码转换 1 string GBKToUTF8(const std::string& strGBK) 2 { 3 int nLen = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0); 4 WCHAR * wszUTF8 = new WCHAR[nLen]; 5 MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, wszUTF8, nLen);

GBK编码字节流与UTF-8编码字节流的转换

import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; public class BianMaDemo4 { public static void main(String[] args) throws IOException, FileNotFoundException { /* * * GB

GB2312、GBK、Unicode和UTF-8编码介绍

 汉字编码知识点 ASCII码是西欧编码的方式,采取7位编码,所以是2^7=128,共可以表示128个自负,包括34个字符,(如换行LF,回车CR等),其余94位为英文字母和标点符号及运算符号等.在计算机中,一个ASCII码占8位,最高位(bit7)用作奇偶校验.奇校验规则:正确的代码一个字节中1的个数必须是奇数,若非奇数,则在最高位b7补一个1:偶校验规则:正确的代码一个字节中1的个数必须是偶数,若非偶数,则在最高位b7补一个1. 为了识别双字节的字符,比如汉字或日文韩文等都是占用2个字节

UTF-8、GBK、GBK2312等字符编码的区别和vim乱码等相关问题研究。

转自本人博客:xge技术博客 http://www.xgezhang.com/char_encodind_vim.html 关于字符编码的问题在做项目的时候经常都会出现,但一直没有很系统的研究过,今天早上系统的看了几篇文章.在此整理分享以下. 三种编码方式的简介: gb2312(又称为GB 2312-80)编码是一个简体中文字符集的中国国家标准,全称为<信息交换用汉字编码字符集·基本集>,又称为GB0,由中国国家标准总局发布,1981年5月1日实施.GB2312编码适用于汉字处理.汉字通信等系

告别乱码,针对GBK、UTF-8两种编码的智能URL解码器的java实现(转)

效果图 字符 字符是早于计算机而存在,从人类有文明那时起,人们就用一个个符号代表世间万象.如ABC,如“一.二.三”. 字符集 字符集是所有字符的集合. XXX字符集 给字符集中的每一个字符套上一个序号后的字符集.常见的XXX字符集有ASCLL字符集.Unicode字符集等等,不同种字符集为每个字符编的序号不同,包含的字符数量也不同. GBK.UTF-8 GBK.UTF-8是一种编码编码格式.当然,你也可以说unicode是一种编码格式,因为它的的确确为每个字符编了一个码,没错,可是unicod

C#实现整型数据字任意编码任意进制的转换和逆转换

实现如下: using System; using System.Collections.Generic; using System.Linq; using System.Text;  namespace ConsoleApplication1 {      public class Number     {         public string Characters         {             get;             set;         }        

转换编码,将Unicode编码转换成可以浏览的utf-8编码

//转换编码,将Unicode编码转换成可以浏览的utf-8编码 public function unicodeDecode($name) { $pattern = '/([\w]+)|(\\\u([\w]{4}))/i'; preg_match_all($pattern, $name, $matches); if (!empty($matches)) { $name = ''; for ($j = 0; $j < count($matches[0]); $j++) { $str = $matc

UTF-8编码与Unicode CS2的转换

/* Convert a UTF-8 string into a UCS-2 array. */ void tcstrutftoucs(const char *str, uint16_t *ary, int *np){ assert(str && ary && np); const unsigned char *rp = (unsigned char *)str; unsigned int wi = 0; while(*rp != '\0'){ int c = *(unsi

关于编码问题以及不同平台编码及string与编码的关系

说明:这里简要说明一下不同平台的编码不同,c语言中的char *与编码的关系这些问题,及对通常困扰的乱码问题做个总结 一.编码 简单说,就是计算机识别信息的一种格式,ascal.utf-8这些都属于编码,计算机根据这些编码标准,解读出内容.l 二.ANSI.ascll.utf8.unicode等说明 1.  ASCII和Ansi编码 字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为 单字节内码 -- Single-Byte charac