- 浏览: 438534 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (538)
- C/C++ Primer (69)
- Objective-C Primer (102)
- Python Primer (19)
- JavaScript Primer (1)
- Java Primer (37)
- PHP Primer (17)
- 泛 Linux (37)
- Shell Script (21)
- APUE (21)
- UNP__1&2 (19)
- NetWork (7)
- Oracle周边 (38)
- Mysql里边 (6)
- Windows技 (9)
- 简单算法 & 数据结构 (14)
- 设计模式 (6)
- GTK历程 (12)
- 工具使用 (25)
- 杂事 (23)
- 一些概念 (17)
- Web方面 (10)
- myCodeTools (9)
- ^未 竟$ (13)
- 硬件通信 (2)
- Games (1)
最新评论
copy:http://luckybirdtom.blog.hexun.com/40835185_d.html
通过设置区域可以格式化字符、日期和为货币显示格式为本地。C语言支持这些特性使得C语言可以直接支持中文。C语言中的宽字符与多字节字符的简介可以参考后面的介绍。
unicode宽字符串使用方法如下:包含头文件#include<locale.h>,程序初始处写语句setlocale(LC_ALL, "Chinese"); 声明变量时应该在字符串前加上L wchar_t ws[100] = L"俄罗斯russia"; 一般的字符串处理函数都换成以wcs开头的版本, printf("%d\n", wcslen(ws) ); 则会输出9(“俄罗斯”算三个字符)。如果printf的格式串使用的是宽字符串,则应该使用wprintf。相关的其他一些函数还有有wctomb,wcstombs ,mbstowcs,mbtowc在两种字符串之间转换。
这样就可以直接处理中文字符串了,不会出现将一个中文汉字当成两个字母处理所出现的种种问题。
下面是一段示例代码(在vc60环境下使用)
wide character (http://en.wikipedia.org/wiki/Wide_character)
Wide character is a computer programming term. It is a vague term used to represent a datatype that is richer than the traditional (8-bit) characters. It is not the same thing as Unicode.
wchar_t is a data type in ANSI/ISO C and some other programming languages that is intended to represent wide characters.
The Unicode standard 4.0 says that
"ANSI/ISO C leaves the semantics of the wide character set to the specific implementation but requires that the characters from the portable C execution set correspond to their wide character equivalents by zero extension."
and that
"The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers."
Under Win32, wchar_t is 16 bits wide and represents a UTF-16 code unit. On Unix-like systems wchar_t is commonly 32 bits wide and represents a UTF-32 code unit.
In ANSI C library header files, <wchar.h> and <wctype.h> deal with the wide characters.
什么是C语言中的宽字符与多字节字符
来源:www.dzsc.com/data/html/2008-9-12/69107.html
C语言原本是在英文环境中设计的,主要的字符集是7位的ASCII码,8位的byte(字节)是最常见的字符编码单位。但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一个字节编码。
C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定)。
自从1994年的增补之后,C语言不只提供char类型,还提供wchar_t类型(宽字符),此类型定义在stddef.h 头文件中。wchar_t指定的宽字节类型足以表示某个实现版本扩展字符集的任何元素。
在多字节字符集中,每个字符的编码宽度都不等,可以是一个字节,也可以是多个字节。源代码字符集和运行字符集都可能包含多字节字符。多字节字符可以被用于字符的常量、字符串字面值(string literal)、标识符(identifier)、注释(comment),以及头文件。
C语言本身并没有定义或指定任何编码集合,或任何字符集(基本源代码字符集和基本运行字符集除外),而是由其实现指定如何编码宽字符,以及要支持什么类型的多字节字符编码机制。
虽然C标准没有支持Unicode字符集,但是许多实现版本使用Unicode转换格式UTF-16和UTF-32来处理宽字符。如果遵循Unicode标准,wchar_t类型至少是16或32位长,而wchar_t类型的一个值就代表一个Unicode字符。
UTF-8是一个由Unicode Consortium(万国码联盟)定义的实现,可以表示Unicode字符集的所有字符。UTF-8字符所使用的空间大小从一个字节到四个字节都有可能。
多字节字符和宽字符(也就是wchar_t)的主要差异在于宽字符占用的字节数目都一样,而多字节字符的字节数目不等,这样的表示方式使得多字节字符串比宽字符串更难处理。比方说,即使字符'A'可以用一个字节来表示,但是要在多字节的字符串中找到此字符,就不能使用简单的字节比对,因为即使在某个位置找到相符合的字节,此字节也不见得是一个字符,它可能是另一个不同字符的一部分。然而,多字节字符相当适合用来将文字存储成文件。
C提供了一些标准函数,可以将多字节字符转换为wchar_t,或将宽字符转换为多字节字符。比方说,如果C 编译器使用Unicode 标准的UTF-16 和UTF-8,那么下面调用wctomb()函数就可以获得字符的多字节表示方式(注:wctomb = wide character to multibyte)。
通过设置区域可以格式化字符、日期和为货币显示格式为本地。C语言支持这些特性使得C语言可以直接支持中文。C语言中的宽字符与多字节字符的简介可以参考后面的介绍。
unicode宽字符串使用方法如下:包含头文件#include<locale.h>,程序初始处写语句setlocale(LC_ALL, "Chinese"); 声明变量时应该在字符串前加上L wchar_t ws[100] = L"俄罗斯russia"; 一般的字符串处理函数都换成以wcs开头的版本, printf("%d\n", wcslen(ws) ); 则会输出9(“俄罗斯”算三个字符)。如果printf的格式串使用的是宽字符串,则应该使用wprintf。相关的其他一些函数还有有wctomb,wcstombs ,mbstowcs,mbtowc在两种字符串之间转换。
这样就可以直接处理中文字符串了,不会出现将一个中文汉字当成两个字母处理所出现的种种问题。
下面是一段示例代码(在vc60环境下使用)
#include<stdio.h> #include<string.h> #include<locale.h> #include<stdlib.h> #include<time.h> int main() { setlocale(LC_ALL, "Chinese"); //设置为中文本地化 wchar_t s[100]=L"俄罗斯123"; //初始化时在字符串前加L char a[100]="中国China"; mbstowcs(s,a,100); //多字符字符串转为宽字符串 printf("%d\n", sizeof(wchar_t));//每个字符占2字节 printf("%d\n", strlen(a));//str开头是多字节字符串函数 计算长度时一个汉字算2 printf("%d\n", wcslen(s));//wcs开头是宽字符串函数 一个汉字长度算1 printf("%S\n", s);//注意使用大写的S //下面是一段帮助文档中的示例代码 在中文模式下显示当地的时间 time_t ltime; struct tm *thetime; unsigned char str[100]; time (<ime); thetime = gmtime(<ime); /* %#x is the long date representation, appropriate to * the current locale */ //setlocale(LC_ALL, "Chinese"); if (!strftime((char *)str, 100, "%#x",(const struct tm *)thetime)) printf("strftime failed!\n"); else printf("In Chinese locale, strftime returns '%s'\n", str); /* Set the locale back to the default environment */ setlocale(LC_ALL, "C"); time (<ime); thetime = gmtime(<ime); if (!strftime((char *)str, 100, "%#x", (const struct tm *)thetime)) printf("strftime failed!\n"); else printf("In 'C' locale, strftime returns '%s'\n", str); return 0; }
wide character (http://en.wikipedia.org/wiki/Wide_character)
Wide character is a computer programming term. It is a vague term used to represent a datatype that is richer than the traditional (8-bit) characters. It is not the same thing as Unicode.
wchar_t is a data type in ANSI/ISO C and some other programming languages that is intended to represent wide characters.
The Unicode standard 4.0 says that
"ANSI/ISO C leaves the semantics of the wide character set to the specific implementation but requires that the characters from the portable C execution set correspond to their wide character equivalents by zero extension."
and that
"The width of wchar_t is compiler-specific and can be as small as 8 bits. Consequently, programs that need to be portable across any C or C++ compiler should not use wchar_t for storing Unicode text. The wchar_t type is intended for storing compiler-defined wide characters, which may be Unicode characters in some compilers."
Under Win32, wchar_t is 16 bits wide and represents a UTF-16 code unit. On Unix-like systems wchar_t is commonly 32 bits wide and represents a UTF-32 code unit.
In ANSI C library header files, <wchar.h> and <wctype.h> deal with the wide characters.
什么是C语言中的宽字符与多字节字符
来源:www.dzsc.com/data/html/2008-9-12/69107.html
C语言原本是在英文环境中设计的,主要的字符集是7位的ASCII码,8位的byte(字节)是最常见的字符编码单位。但是国际化软件必须能够表示不同的字符,而这些字符数量庞大,无法使用一个字节编码。
C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流(stream)所在的环境背景决定)。
自从1994年的增补之后,C语言不只提供char类型,还提供wchar_t类型(宽字符),此类型定义在stddef.h 头文件中。wchar_t指定的宽字节类型足以表示某个实现版本扩展字符集的任何元素。
在多字节字符集中,每个字符的编码宽度都不等,可以是一个字节,也可以是多个字节。源代码字符集和运行字符集都可能包含多字节字符。多字节字符可以被用于字符的常量、字符串字面值(string literal)、标识符(identifier)、注释(comment),以及头文件。
C语言本身并没有定义或指定任何编码集合,或任何字符集(基本源代码字符集和基本运行字符集除外),而是由其实现指定如何编码宽字符,以及要支持什么类型的多字节字符编码机制。
虽然C标准没有支持Unicode字符集,但是许多实现版本使用Unicode转换格式UTF-16和UTF-32来处理宽字符。如果遵循Unicode标准,wchar_t类型至少是16或32位长,而wchar_t类型的一个值就代表一个Unicode字符。
UTF-8是一个由Unicode Consortium(万国码联盟)定义的实现,可以表示Unicode字符集的所有字符。UTF-8字符所使用的空间大小从一个字节到四个字节都有可能。
多字节字符和宽字符(也就是wchar_t)的主要差异在于宽字符占用的字节数目都一样,而多字节字符的字节数目不等,这样的表示方式使得多字节字符串比宽字符串更难处理。比方说,即使字符'A'可以用一个字节来表示,但是要在多字节的字符串中找到此字符,就不能使用简单的字节比对,因为即使在某个位置找到相符合的字节,此字节也不见得是一个字符,它可能是另一个不同字符的一部分。然而,多字节字符相当适合用来将文字存储成文件。
C提供了一些标准函数,可以将多字节字符转换为wchar_t,或将宽字符转换为多字节字符。比方说,如果C 编译器使用Unicode 标准的UTF-16 和UTF-8,那么下面调用wctomb()函数就可以获得字符的多字节表示方式(注:wctomb = wide character to multibyte)。
发表评论
-
float equal
2013-05-23 18:21 775- (BOOL)floatA:(float)f1 equalB ... -
C++序列化
2012-07-12 09:51 533http://hi.baidu.com/ewook/item/ ... -
C++著名内裤
2011-12-02 14:00 7681、C++各大有名库的介绍 ... -
C++写C
2011-09-06 17:23 584在C++中写C,标准头文件写法 #ifndef __AB ... -
errno.h
2011-05-05 14:27 646#define EPERM 1 ... -
__cplusplus
2011-04-21 15:09 700http://www.cnblogs.com/stonecra ... -
Pthread__常用
2011-04-21 11:46 806http://blogold.chinaunix.net/u/ ... -
常用预编译
2011-04-21 10:32 608#if defined(WIN32) || defined ... -
C++__容器
2011-04-18 10:16 518http://apps.hi.baidu.com/share/ ... -
C++模板
2011-03-29 14:27 594内容主要来至《钱能C++程序设计教程》&《C++ Pr ... -
交叉引用、前置声明
2011-03-02 09:40 767有两个类相互引用了,编译器报错。 原因是两个类交叉引用: A ... -
typedef的四个用途和两个陷阱
2010-12-14 12:34 607http://hi.baidu.com/changfeng01 ... -
第五届开源小组招新题目
2010-12-03 21:56 699这是学校的开源小组招新题。 08年时我是第二届的组长,不知不觉 ... -
string const char*
2010-12-02 16:13 731http://topic.csdn.net/u/2008092 ... -
CPP Container
2010-11-10 09:20 644延后整理。。。 -
C语言运算符优先级
2010-11-02 17:45 740优先级 运算符 ... -
point point
2010-11-02 17:23 578http://learn.akae.cn/media/ch23 ... -
位运算
2010-11-01 11:33 746千百年来,位运算始终没出现在我写的代码里,今天终于出现了。 ... -
Unix环境下操作特大文件
2010-11-01 11:03 566http://hi.baidu.com/jiangfeng11 ... -
GCC在C语言中内嵌汇编
2010-10-22 14:48 1331http://hi.baidu.com/liu_bin0101 ...
相关推荐
C语言字符串和宽位处理函数
C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流...
本文档列出了标准C语言ANSI字符与C++宽字符的处理函数对照表,对于处理宽字符是很好的参考文件。
(宽)字符串与变量类型相互转化 各种变量之间的相互转换。 开发必知
C95标准化了两种表示大型字符集的方法:宽字符(wide character,该字符集内每个字符使用相同的位长)以及多字节字符(multibyte character,每个字符可以是一到多个字节不等,而某个字节序列的字符值由字符串或流...
6.7 使用宽字符串 225 6.8 设计一个程序 228 6.8.1 问题 229 6.8.2 分析 229 6.8.3 解决方案 229 6.9 小结 237 6.10 习题 237 第7章 指针 239 7.1 指针初探 239 7.1.1 声明指针 240 7.1.2 通过指针访问值 ...
#include <string.h> //字符串处理 #include <strstrea.h> //基于数组的输入/输出 #include <time.h> //定义关于时间的函数 #include <wchar.h> //宽字符处理及输入/输出 #include <wctype.h> //宽字符分类 ...
虽然使用的是VC 6.0编写的程序,但是已经测试过,在底层c中也可以实现PDU编码。短信猫中经常用到,主要是一个宽字符串的转换。
西北工业大学NOJC程序设计习题答案(非本人制作,侵删) 1.“1“的传奇 ...141.字符串左中右 142.组合数 143.最次方数 144.最大乘积 145.最大整数 146.最小整数 147.最长回文子串 148.左上角 149.左下角
1.1,最宽恒大量的关键字----auto..........................................................................................11 1.2,最快的关键字---- register.................................................
umount命令的作用是卸载一个文件系统,它的使用权限是超级用户或/etc/fstab中允许的使用者。 2.格式 unmount -a [-fFnrsvw] [-t vfstype] [-n] [-rw] [-F] device dir 3.使用说明 umount 命令是mount命令...
19.10 转换成C语言式char 字符串 19.11 迭代器 19.12 字符串流处理 小结 术语 自测练习 自测练习答案 练习 第20章 标准模板库(STL) 20.1 标准模板库(STL)简介 20.1.1 容器简介 20.1.2 迭代器简介 20.1.3 ...
19.10 转换成C语言式char 字符串 19.11 迭代器 19.12 字符串流处理 小结 术语 自测练习 自测练习答案 练习 第20章 标准模板库(STL) 20.1 标准模板库(STL)简介 20.1.1 容器简介 20.1.2 迭代器简介 20.1.3 ...
1.生成中英文数字混合的字符串的字模数据. 2.可选择字体,大小,并且可独立调整文字的长和宽,生成任意形状的字符。 3.各种旋转,翻转文字功能 4.任意调整输出点阵大小,并任意调整字符在点阵中的位置。 5.字模...
如果字符串的长度、或整型数位数超过说明的场宽, 将按其实际长度输出。 但对浮点数, 若整数部分位数超过了说明的整数位宽度, 将按实际整数位输出; 若小数部分位数超过了说明的小数位宽度, 则按说明的宽度以四舍五入...
支持四种取模方式:逐行、逐列、行列、列行,可以生成中英文数字混合的字符串的字模数据,可选择字体,大小,并且可独立调整文字的长和宽,生成任意形状的字符。除了选择系统预设的C语言和汇编语言两种格式,还可以...
从文本文件(unicode文本)中读取字符串,并转化为CString(char) 演示mbstowcs 和 WideCharToMultiByte的使用
生成中英文数字混合的字符串的字模数据. 2.可选择字体,大小,并且可独立调整文字的长和宽,生成任意形状的字符。 3.各种旋转,翻转文字功能 4.任意调整输出点阵大小,并任意调整字符在点阵中的位置。 5.字模...
生成中英文数字混合的字符串的字模数据. 2.可选择字体,大小,并且可独立调整文字的长和宽,生成任意形状的字符。 3.各种旋转,翻转文字功能 4.任意调整输出点阵大小,并任意调整字符在点阵中的位置。 5.字模...