C11中的Unicode

在C11(ISO/IEC 9899:2011)标准中引入了对UTF8、UTF16以及UTF32字符编码的支持。

其中,UTF8字符直接通过char来定义,字面量前缀使用u8。比如:

char c = u8‘你‘;
const char *s = u8"你好";

而UTF16字符直接通过char16_t来定义,字面量前缀使用u。比如:

#include <uchar.h>

char16_t c = u‘你‘;
const char16_t *s = "你好";

而UTF32字符直接通过char32_t来定义,字面量前缀使用U。比如:

#include <uchar.h>

char32_t c = U‘你‘;
const char32_t *s = U"你好";

在使用char16_t以及char32_t的时候必须包含头文件<uchar.h>。除此之外,C11标准中还添加了诸如wsprintf、wfprintf、vwprintf、wprintf等宽字符函数。不过这些函数的字符串都是const wchar_t*类型的,即宽字符指针类型。而对于Unicode字符的显示是各家平台自己实现的。在OS X以及iOS中,至今(Apple LLVM 6.0)还没完美地支持这一C11特性,但是UTF8、UTF16以及UTF32字面量都已经支持了,尽管系统本身不支持对UTF32编码格式的解析。另外,也没有包含<uchar.h>头文件。不过,我们可以使用Foundation库自带的unichar类型来代替char16_t。另外,printf函数不支持对UTF16编码字符的打印,若要打印UTF16字符或字符串,只能用Foundation里的NSLog函数。

下面举些例子:

#include <stdio.h>
#include <wchar.h>

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    const char *s = u8"你好,世界!";
    printf("此UTF-8字符串为: %s\n", s);

    unichar ch = u‘你‘;
    const unichar *us = u"好,世界!";
    NSLog(@"该UTF16是:%C%S", ch, us);

    wprintf(L"iOS does not support for printing wide-character unicodes!\n");
}

在NSString字符串格式中,%C对应类型为unichar(实际为unsigned short)的UTF16编码字符;%S对应类型为const unichar*,即UTF16编码的字符串。

时间: 2024-10-07 06:32:28

C11中的Unicode的相关文章

对于C11中的正则表达式的使用

Regular Expression Special Characters "."---Any single character(a "wildcard") "["---Begin character class "]"---End character class "{"---Begin count "}"---End count "("---Begin groupi

C#中文和UNICODE编码转换

C#中文和UNICODE编码转换 //中文轉為UNICODE string str = "中文"; string outStr = ""; if (!string.IsNullOrEmpty(str)) { for (int i = 0; i < str.Length; i++) { //將中文轉為10進制整數,然後轉為16進制unicode outStr += "\\u" + ((int)str[i]).ToString("x&

python将dict中的unicode打印成中文

python将dict中的unicode打印成中文 import json a = {u'content': {u'address_detail': {u'province': u'\u5409\u6797\u7701', u'city': u'\u957f\u6625\u5e02', u'street_number': u'', u'district': u'', u'street': u'', u'city_code': 53}, u'point': {u'y': u'43.89833761

Python中的Unicode编码和UTF-8编码

下午看廖雪峰的Python2.7教程,看到 字符串和编码 一节,有一点感受,结合崔庆才的Python博客 ,把这种感受记录下来: ASCII码:是用一个字节(8bit, 0-255)中的127个字母表示大小写字母,数字和一些符号.主要用来表示现代英语和西欧语言. 所以处理中文就出现问题了,因为中文处理至少需要两个字节,所以中国制定了GB2312. 所以,各国制定了各国的标准.日本制定了Shift_JIS,韩国制定了Euc-kr...那么,乱码就来了. 为了统一,Unicode诞生了.统一码把所有

python中文和unicode字符串之间的互相转换

首先:中文->unicode字符串 import chardet import codecs >>> a = "我是一个中国人">>> a'\xce\xd2\xca\xc7\xd2\xbb\xb8\xf6\xd6\xd0\xb9\xfa\xc8\xcb' >>> chardet.detect(a){'confidence': 0.99, 'encoding': 'GB2312'}>>> b = a.decod

web前端-常见中文字体在CSS中的Unicode编码

一,常见中文字体在CSS中的Unicode编码 新细明体: \65b0\7ec6\660e\4f53 细明体: \7ec6\660e\4f53 标楷体: \6807\6977\4f53 黑体: \9ed1\4f53 宋体: \5b8b\4f53 新宋体: \65b0\5b8b\4f53 仿宋: \4eff\5b8b 楷体: \6977\4f53 仿宋_gb2312: \4eff\5b8b_gb2312 二,例如:font-family:’ \5b8b\4f53’;

Wpf中显示Unicode字符

1. 引言 今天在写一个小工具,里面有些字符用Unicode字符表示更合适.但是一时之间却不知道怎么写了.经过一番查找,终于找到了办法.记到这里,一是加深印象,二则以备查询. 2. C#中使用Unicode字符 比如"%",其Unicode编码是0x0025,在C#中如下表示: var percentage = "\u0025"; 注意,表示方法是"\u"+Unicode码,这里的u必须是小写. 3. XAML中表示Unicode字符 xaml基

从ord()中对Unicode编码的理解

刚开始学习编程的时候,老对字符串编码的理解模模糊糊.也一直看这方便的资料,今天在看Dive in python时,突然有了新的理解(不知道是否正确). Python有个built-in函数ord(),返回一个字符的unicode值.这个函数并没有其他参数,那就是说,给定一个字符,就会有一个特定值对应.跟具体编码(utf-8,utf-16,gb2312)无关. 我之前错误的理解是:每套编码都有自己的对应表. 现在看来,unicode标准囊括了世界上所有的字符,每个字符都有对应的unicode值.

编码对象或者字串中包含Unicode字符怎样转换为中文

In [18]: c = '你好' In [20]: d = c.encode('unicode_escape') In [21]: d Out[21]: b'\\u4f60\\u597d' In [23]: e = d.decode('utf-8') In [24]: e Out[24]: '\\u4f60\\u597d' In [25]: type(e) Out[25]: str In [26]: f = e.encode('utf-8').decode('unicode_escape')