请问如何用C语言实现汉字,和Unicode编码的转换?

请问如何用C语言实现汉字,和Unicode编码的转换?,第1张

字转换:wctomb、mbtowc,wc 指 Wide charactor,mb 指 Multi-byte。\r\n字符串转换:wcstombs、mbstowcs,wcs 和 mbs 的 s 指 string。\r\n\r\n这 4 个函数是 C 标准函数库函数中的。如果只是在 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) 编码。\r\n\r\n#include \r\n#include \r\n#include \r\n\r\nint main(void)\r\n{\r\nchar str[12]\r\nwchar_t wstr[] = { 0x52B3, 0x788C, 0 }\r\nsetlocale(LC_ALL, "")\r\nwcstombs(str, wstr, sizeof(str)/sizeof(char))\r\nprintf("%s", str)\r\nreturn 0\r\n}

void main()  

{  

    char a[3]

   wchar_t str

   printf("输入一个汉字:\n")

    gets(a)

MultiByteToWideChar(CP_ACP, 0, a, -1, &str, 1)

printf("%s", a)

    printf("字Unicode编码为%x\n",(unsigned short)str)  

 

}

Unicode编码

   在计算机科学领域中,Unicode(统一码、万国码、单一码、标准万国码)是业界的一种标准,它可以使电脑得以呈现世界上数十种文字的系统。Unicode是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表。Unicode包含了超过十万个字符(在2005年,Unicode的第十万个字符被采纳且认可成为标准之一)、一组可用以作为视觉参考的代码图表、一套编码方法与一组标准字符编码、一套包含了上标字、下标字等字符特性的列举等。

    Unicode的编码方式与ISO 10646的通用字符集(Universal Character Set,UCS)概念相对应,目前实际应用的Unicode版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216即65536个字符。基本满足各种语言的使用。实际上目前版本的Unicode尚未填充满这16位编码,保留了大量空间作为特殊使用或将来扩展。

C++处理Unicode编码

为了处理Unicode编码C++为每个字符处理函数提供了宽字符(wchar_t)处理函数。

在ANSI/ISO 9899--1990也就是美国国家为程序设计语言C指定的标准(也称为ANSI C)中是这样定义的:用多个字节来代表的字符称之为宽字符,而Unicode只是宽字符编码的一种实现,宽字符并不一定是Unicode。

C语言中输出unicode编码可以是用宽字符输出函数。

下面是宽字符常用的输入输出函数表:

打印和扫描字符串:

宽字符函数                       描述

fprintf()/fwprintf()             使用vararg参量的格式化输出

fscanf()/fwscanf()             格式化读入

printf()                              使用vararg参量的格式化输出到标准输出

scanf()                              从标准输入的格式化读入

sprintf()/swprintf()             根据vararg参量表格式化成字符串

sscanf()                           以字符串作格式化读入

vfprintf()/vfwprintf()           使用stdarg参量表格式化输出到文件

vprintf()                             使用stdarg参量表格式化输出到标准输出

vsprintf()/vswprintf()          格式化stdarg参量表并写到字符串

输入和输出:

宽字符函数     普通C函数     描述

fgetwc()           fgetc()           从流中读入一个字符并转换为宽字符

fgetws()           fgets()           从流中读入一个字符串并转换为宽字符串

fputwc()           fputc()           把宽字符转换为多字节字符并且输出到标准输出

fputws()           fputs()           把宽字符串转换为多字节字符并且输出到标准输出串

getwc()            getc()            从标准输入中读取字符, 并且转换为宽字符

getwchar()       getchar()       从标准输入中读取字符, 并且转换为宽字符

None               gets()            使用fgetws()

putwc()            putc()            把宽字符转换成多字节字符并且写到标准输出

putwchar()        putchar()       把宽字符转换成多字节字符并且写到标准输出

None               puts()             使用fputws()

ungetwc()         ungetc()         把一个宽字符放回到输入流中


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11555058.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存