字符和字符串处理-ANSI字符和Unicode字符

我们知道,C语言用char数据类型表示一个8位的ANSI字符,默认在代码中声明一个字符串时,C编译器会把字符串中的字符转换成由8位char数据类型构成的一个数组:

// An 8-bit character
char c = ‘A‘;

// An array of 99 8-bit character and 8-bit terminating zero
char szBuffer[100] = "A String";

Microsoft的C/C++编译器定义了一个内建的数据类型wchar_t,它表示一个16位的Unicode(UTF-16)字符。编译器只有指定了/Zc:wchar_t编译器开关时,才会定义这个参数类型。

声明Unicode字符和字符串的方法如下:

// A 16-bit character
wchar_t c= L‘A‘;

// An array up to 99 16-bit characters and a 16-bit terminating zero
wchar_t szBuffer[100] = L"A String";

字符串之前的大写字母L通知编译器该字符串应该编译一个Unicode字符串。

另外,在编写代码的时候,可以使用ANSI或Unicode字符/字符串使其能通过编译。WinNT.h定义了以下类型和宏:

#ifdef UNICODE

typedef WCHAR TCHAR, *PTCHAR, PTSTR;
typedef CONST WCHAR *PCTSTR;

#define __TEXT(quote) L##quote

#else

typedef CHAR TCHAR, *PTCHAR, PTSTR;
typedef CONST CHAR *PCTSTR;

#define __TEXT(quote) quote

#endif

#define TEXT(quote) __TEXT(quote)

利用这些类型和宏来写代码,无论使用ANSI还是Unicode字符,都能通过编译,如下所示:

// If UNICODE define, a 16-bit character; else an 8-bit character
TCHAR c = TEXT(‘A‘);

// If UNICODE define, an array of 16-bit character; else 8-bit character
TCHAR szBuffer[100] = TEXT("A String");
时间: 2024-08-05 19:35:34

字符和字符串处理-ANSI字符和Unicode字符的相关文章

decode 函数将字符串从某种编码转为 unicode 字符

环境:Ubuntu, Python 2.7 基础知识 这个程序涉及到的知识点有几个,在这里列出来,不详细讲,有疑问的直接百度会有一堆的. 1.urllib2 模块的 request 对像来设置 HTTP 请求,包括抓取的 url,和伪装浏览器的代理.然后就是 urlopen 和 read 方法,都很好理解. 2.chardet 模块,用于检测网页的编码.在网页上抓取数据很容易遇到乱码的问题,为了判断网页是 gtk 编码还是 utf-8 ,所以用 chardet 的 detect 函数进行检测.没

__x__(55)0919第八天__字符串中使用 \u 输出Unicode字符

JavaScript中,使用Unicode 需要 \u 进行转义,格式 "\u十六进制" console.log(\u0031); // 1 console.log(\u0041); // A console.log(\u0061); // a console.log(\u2620); // 骷髅 console.log(\u2630); // 卦象 console.log(\u2640); // 性别符号 html中,使用Unicode 需要使用十进制编码,格式 "&

C#字符和字符串

Char类是C#提供的字符类型,String是C#提供的字符串类型. 字符: Char类在C#中表示一个Unicode字符. Char类只定义一个Unicode字符. Char类常用的方法及说明如下: 方    法 说    明 IsControl 指示指定的Unicode字符是否属于控制字符类别 IsDigit 指示某个Unicode字符是否属于十进制数字类别 IsHighSurrogate 指示指定的Char对象是否为高代理项 IsLetter 指示某个Unicode字符是否属于字母类别 I

JAVA如何正确处理Unicode字符

最近在开发输入法程序时遇到一个小问题,就是删除一个emoji时,不能一次删干净,需要执行两次操作才可以.Intuitively,这肯定是java操作unicode字符的问题,于是找了JAVA官方文档参考一下,解决了这个问题,这里做下简单总结.原文在这里,有兴趣自己看. http://www.oracle.com/technetwork/articles/java/supplementary-142654.html 注:文章中提到的"JAVA字节"均指JAVA平台的16位字节,请不要和C

几个Unicode新知识:扩展ANSI有很多种(256个字符),Unicode表示ANSI字符时高字节为0,Unicode不包括古代字符

都是有些模糊的概念,特别是Unicode不包括古代字符让我有点惊讶.看来Unicode只适用于大多数情况,一旦有无法表示的字符,那该怎么办呢? ANSI针对英语设计的,当处理带有音调标号(形如汉语的拼音)的欧洲文字时就会出现问题.因此,创建出了一些包括255个字符的由ASCII扩展的字符集.其中有一种通常被称为IBM字符集,它把值为128-255之间的字符用于画图和画线,以及一些特殊的欧洲字符.另一种8位字符集是ISO 8859-1 Latin 1,也简称为ISO Latin-1.它把位于128

Unicode字符转换成字符串

/*** * Unicode字符转换成字符串 * @param str * Unicode字符 * @return * String * * @author WXW */ public static String Unicode2String(String str){ Pattern pattern = Pattern.compile("(\\\\u(\\p{XDigit}{4}))"); Matcher matcher = pattern.matcher(str); char ch;

推荐的字符和字符串处理方法

最好将应用程序转换为支持Unicode的形式. 遵循的基本准则如下: 1.开始将文本字符串想象为字符的数组,而不是char或字节的数组 2.用通用数据类型(如TCHAR/PTSTR)来表示文本字符和字符串 3.用明确的数据类型(如BYTE和PBYTE)来表示字节,字节指针和数据缓冲区 4.用TEXT或_T宏来表示字面量字符和字符串,但为了保持一致性和更好的可读性,请避免两者混用 5.执行全局替换(例如,用PTSTR替换PSTR) 6.修改于字符串有关的计算.例如,函数经常希望我们传给它缓冲区大小

字符编码终极笔记:ASCII、Unicode、UTF-8、UTF-16、UCS、BOM、Endian

很详细很不错,转过来学习一下: 转载自:http://www.cnblogs.com/lidabo/archive/2013/11/27/3446518.html 1.字符编码.内码,顺带介绍汉字编码 字符必须编码后才能被计算机处理.计算机使用的缺省编码方式就是计算机的内码.早期的计算机使用7位的ASCII编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的big5. GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号.汉字区的内码范围

Unicode字符集和多字节字符集关系(转载)

Unicode字符集和多字节字符集关系 原文链接:http://blog.csdn.net/stephen1315/article/details/ 在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码代表,要取决于使用哪个字符集(charset).      在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示128个字符,其中包括了英文字母.数字.标点符号等常用字符.之后,又进行扩