关于中文字符编码在linux下转换。随手笔记

本文深入解析了字符编码转换原理,包括wctomb、mbtowc、wcstombs及mbstowcs等C标准库函数的使用方法。通过实例演示了在Linux环境下如何正确进行宽字符与多字节字符之间的转换,并指出Windows平台下的对应API。文章强调了不同平台下多字节编码的区别,如Linux使用UTF-8,Windows则采用ANSI编码。

字转换:wctomb、mbtowc,baiwc 指 Wide charactor,mb 指 Multi-byte。


字符串转换:wcstombs、mbstowcs,wcs 和du mbs 的 s 指 string。


这 4 个函数zhi是 C 标准函数库函数中的。

如果只是dao在 Windows 平台下编程,
可直接调用 Windows API 函数 WideCharToMultiByte 和 MultiByteToWideChar 实现。


但是如果调用标准库函数的话,在 Linux 下也是有效的。

调用标准库函数,

首先必须包含
 locale.h 

并调用 setlocale(LC_ALL, "") 后才能正确转换。

Windows 下的 Multi-byte 是 ANSI 编码的,Wide charactor 是 Unicode (UTF-16) 编码

而 Linux 下的 Multi-byte  是 UTF-8 编码的,Wide charactor 是 Unicode (UTF-32) 编码。

 

以下代码在linux执行。windows请使用WideCharToMultiByte 和 MultiByteToWideChar 使用即可

 


#include <stdlib.h>
#include <stdio.h>
#include <locale.h>


int main(){


    char str[12];

    wchar_t wstr[] = {0x5e7f,0x5dde,0x516c,0x4ea4};


    setlocale(LC_ALL,"");

    wcstombs(str,wstr,sizeof(str)/ sizeof(char));

    printf("str=%s",str);


    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值