c/c++ 中文字符串转Unicode和UTF8

1. 描述

  在windows上做系统编程,少不了会遇到处理中文字符串的问题。而大多时候中文汉字都是以多字节编码的方式展现的。为了实现更好的兼容性或一些特殊的需求,(比如在网页上显示。)常需要将其转换成unicode或者utf8的格式。


2. 代码示例

2.1 中文字符串转Unicode

/************************************************************************
*int CN2Unicode(char *input,wchar_t *output)
*功能:中文字符转换为unicode字符
*参数:input,包含中文的字符串,output,Unicode字符串
*
*************************************************************************/
int CN2Unicode(char *input,wchar_t *output)
{
    int len = strlen(input);

    //wchar_t *out = (wchar_t *) malloc(len*sizeof(wchar_t));

    len=MultiByteToWideChar(CP_ACP,0,input,-1,output,MAX_PATH);

    return 1;
}

2.2 中文字符串转utf8

/************************************************************************
*int CN2Utf8(char *input,char *output)
*功能:中文字符串转换为utf8字符串
*参数:input,包含中文的字符串,output,utf8字符串
*
************************************************************************/
int CN2Utf8(char *input,char *output)
{
    int len ;
    wchar_t *out = (wchar_t *) malloc(len*sizeof(wchar_t));

    len = MultiByteToWideChar(CP_ACP,0,input,-1,out,strlen(input)+1);
    WideCharToMultiByte(CP_UTF8,0,out,wcslen(out),output,len,NULL,NULL);

    return 1;
}
时间: 2024-12-06 06:05:29

c/c++ 中文字符串转Unicode和UTF8的相关文章

[C/C++]_[VS2010源码中使用UTF8中文字符串被转码为ANSI的问题]

场景: 1.本以为vs设置了源文件的UTF8编码,代码中出现的中文字符串就一定是utf8编码了,可惜不是,如果源码中出现了中文字符串,会在内存中转码为ANSI编码. Unicode(UTF8带签名) 代码页(65001),从菜单->文件->高级保存选项 设置. 例子: char path[] = "resources\\中文\\"; for(int i = 0; i < strlen(path); ++i) { printf("0x%x,",(un

Python 用hashlib求中文字符串的MD5值 (转自 haungrui的专栏)

使用过hashlib库的朋友想必都遇到过以下的错误吧:“Unicode-objects must be encoded before hashing”,意思是在进行md5哈希运算前,需要对数据进行编码.而且在不同版本的Python下还有所不同,唉Python还需努力啊,接口和消 息都很不稳定. hashlib.md5(data)函数中,data参数的类型应该是bytes.也就是说我们在进行hash前必须把数据转换成bytes类型,对于C程序而言似乎没有类似问题,指针强制转换就OK了. 对于中文,

中文转换成Unicode编码 和 Unicode编码转换为中文

前几天,遇到一个问题,就是在浏览器地址栏传递中文时,出现乱码,考虑了一下,解决方式有很多,我还是采用了转换编码的方式,将中文转换为Unicode编码,然后再解码成中文,以下是实现的过程,非常简单! package cy.code; public class CyEncoder { private String zhStr; //中文字符串 private String unicode;//将中文字符串转换为Unicode编码 存储在这个属性上. public CyEncoder(String z

scrapy抓取的页面中文会变成unicode字符串

不了解编码的,需要先补下:http://www.cnblogs.com/jiangtu/p/6245264.html 现象:从scrapy抓取的页面中文会变成unicode字符串,如下图 2017-03-28 23:00:12 [scrapy.core.scraper] DEBUG: Scraped from <200 https://www.lagou.com/jobs/2617468.html> {'describe': [u'<div>\n <p>\u5c97\u

ASCII、Unicode、UTF-8 字符串和编码

字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 由于计算机是美国人发明的,因此,最早只有1

解决vs2013下创建的python文件,到其他平台(如linux)下中文乱码(或运行时报SyntaxError: (unicode error) &#39;utf-8&#39; codec can&#39;t decode byte...)

Vs2013中创建python文件,在文件中没输入中文时,编码为utf-8的,如图 接着,在里面输入几行中文后,再次用notepad++查看其编码如下,在vs下运行也报错(用cmd运行就不会): 根据以有经验,这是字符编码的问题了,试着将python文件的转化为utf-8的,直接在notepad++上转utf-8 无bom编码格式的,保存,打开vs,会有以下提示 这里不要选择no吧,不然可能会提示以下类似的错误 如果有提示,直接关闭,不然的话,vs又会将此文件保存为ascii格式了 解决vs20

十六进制Unicode编码字符串与中文字符串的相互转换

图书馆客户端项目中遇到的一个问题,得到的URL 是这样的 String baseurl = "http://innopac.lib.xjtu.edu.cn/availlim/search~S1*chx?/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ/X{u848B}{u4ECB}{u77F3}&searchscope=1&SORT=DZ&extended=0&SUBKEY=%E8%92%8B%E4%BB%

linux shell下16进制 “\uxxxx” unicode to UTF-8中文

问题出现背景: 项目中有个通过ip获取归属地城市需求,我是直接通过新浪的ip归属查询接口来获取的.我使用的是shell脚本调用 RESULT=$(curl -s 'http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=119.137.53.145') 返回json格式的值: var remote_ip_info = {"ret":1,"start":-1,"end"

php截取中文字符串 GB2312 utf-8

UTF-8截取中文字符串 function Cn_Substr($string, $length) { preg_match_all("/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/&q