多字节字符和宽字符
来源:互联网 发布:js给value赋值 编辑:程序博客网 时间:2024/05/29 15:50
多字节字符和宽字符
开发多语言版软件,经常会碰到字符编码的问题,看了很多资料都说得不是很清楚,终于碰到一篇讲的不错的文章跟大家分享一下!(时间关系,翻译了重点部分)
char型和wchar型
在日文版Windows上我们用到字符编码是Shift-JIS,主要的用1byte表示英数字,2byte表示日文字符,这种编码表示的字符称作多字节字符。(中文版Windows字符编码:GB2312)
char数组的字符
世界上主流的标准字符编码是Unicode,在Windows上,英数字,日文字符,中文字符,其他语言字符,原则上都是用2byte表示一个字符。这种编码表示的字符称作宽节字。
wchar_t数组的字符
字符的声明,定义和大小
为了表示不同的字符串,下面定义了char型和wchar_t型的字符串,其内存大小参考注释部分。
// char(マルチバイト文字列)の宣言と表示char strm[] = "Testストリング";printf( "%3d: %s\n", sizeof( strm ), strm ); // 15: Testストリング // wchar_t(ワイド文字列)の宣言と表示setlocale( LC_ALL, "Japanese" );wchar_t strw[] = L"Testすとりんぐ";wprintf( L"%3d: %s\n", sizeof( strw ), strw ); // 20: Testすとりんぐ
在VisualStudio中可以通过TCHAR定义字符,TCHAR型就是typedef定義,程序在编译时候设定为多字节字符时,变成了char型,设定为宽字节字符时,变成了wchar_t型,是个方便的类型。
// TCHAR(自動対応型文字)の宣言と表示TCHAR strt[] = _T("Testすとリング");_tprintf( _T("%3d: %s\n"), sizeof( strt ), strt );
VisualStudio的字符集的指定
不管你是要用Unicode还是Shift-JIS在VisualStudio中都是可以自由的选择。
在VisualStudio工程解决方案上右击,从弹出的菜单中选择属性,出现如下的图。
文字セット(字符集)-红色框中
設定なし(没有设定):没有设定_UNICODE _MBCS宏,仅适用于英文ANSII。
Unicode 文字セットを使用する(使用Unicode字符集):设定了_UNICODE宏,TCHAR型自动转换为wchar_t型,字符操作函数也自动转换为了对应的宽字符函数。
マルチ バイト文字セットを使用する(使用多字节字符集):设定了_MBCS宏,TCHAR型自动转换为char型,字串操作函数也自动转换为了对应的多字节函数。
設定なし(没有设定):没有设定_UNICODE _MBCS宏,仅适用于英文ANSII。
Unicode 文字セットを使用する(使用Unicode字符集):设定了_UNICODE宏,TCHAR型自动转换为wchar_t型,字符操作函数也自动转换为了对应的宽字符函数。
マルチ バイト文字セットを使用する(使用多字节字符集):设定了_MBCS宏,TCHAR型自动转换为char型,字串操作函数也自动转换为了对应的多字节函数。
多字节字符与宽字符的转换
函数mbstowcs:多字节字符到宽字符的转换函数
// mbstowcs関数でワイド文字列へ変換char strm[] = "Testストリング";wchar_t strwfm[32];setlocale( LC_ALL, "Japanese" ); mbstowcs( strwfm, strm, strlen( strm )+1 );wprintf( L"%s(文字数=%d)\n", strwfm, wcslen( strwfm ) );
函数wcstombs:宽字符到多字节字符的转换函数
// wcstombs関数でマルチバイト文字列へ変換wchar_t strw[] = L"Testすとりんぐ";char strmfw[32];setlocale( LC_ALL, "Japanese" ); wcstombs( strmfw, strw, sizeof( strmfw ) );printf( "%s(文字数=%d)\n", strmfw, strlen( strmfw ) );
P.S参考地址:http://mkubara.com/index.php/%E3%83%9E%E3%83%AB%E3%83%81%E3%83%90%E3%82%A4%E3%83%88%E6%96%87%E5%AD%97%E5%88%97%E3%81%A8%E3%83%AF%E3%82%A4%E3%83%89%E6%96%87%E5%AD%97%E5%88%97
2 0
- 宽字符和多字节字符
- 宽字符和多字节字符
- 宽字符和多字节字符
- 多字节字符和宽字符
- 多字节字符和宽字符
- c++宽字符和多字节字符相互转化类
- C语言中宽字符和多字节字符
- 宽字符和多字节字符(mbtowc/wctomb)
- 宽字符和多字节(窄字符)转换
- 宽字符与多字节字符
- 多字节字符与宽字节字符
- 多字节字符与宽字节字符
- 宏 宽字符转多字节 多字节转宽字符
- ANSI字符,UNICODE,宽字符,窄字符,多字节字符集
- ANSI字符,UNICODE,宽字符,窄字符,多字节字符集
- ANSI字符,UNICODE,宽字符,窄字符,多字节字符集
- VS2005 宽字符 unicode字符集和多字节字符集
- 多字节和宽字符之间的转换方法
- Android关机流程源码分析
- 仿开源中国,分享代码时候的多文件上传
- MySQL高可用系列之MHA(一)
- sql学习笔记
- C语言操作Excel表格
- 多字节字符和宽字符
- 01背包(二维数组)+方案记录
- JVM
- rabbitmq学习笔记
- android——获取屏幕分辨率——Activity中/非Activity中
- #!/bin/bash
- c++构造函数中初始化列表的作用和机制
- js 打开一个新页面 window.open()
- HDU 1711 Number Sequence //简单kmp