Locale和charset的关系

转载自:http://openwebx.org/docs/requestcontexts.html


Locale和charset是相对独立的两个参数,但是又有一定的关系。

Locale决定了要显示的文字的语言,而charset则将这种语言的文字编码成bytes或从bytes解码成文字。因此,charset必须能够涵盖locale所代表的语言文字,如果不能,则可能出现乱码。下表列举了一些locale和charset的组合:

表  Locale和Charset的关系

Locale 英文字符集 中文字符集 全字符集
ISO-8859-1 GB2312 Big5 GBK GB18030 UTF-8
en_US(美国英文)
zh_CN(简体中文)    
zh_TWzh_HK(台湾中文、香港中文)    

在所有charset中,有几个“全能”编码:

UTF-8

涵盖了unicode中的所有字符。然而用UTF-8来编码中文为主的页面时,每个中文会占用3个字节。建议以非中文为主的页面采用UTF-8编码。

GB18030

中文国际标准,和UTF-8一样,涵盖了unicode中的所有字符。用GB18030来编码中文为主的页面时有一定优势,因为绝大多数常用中文仅占用2个字节,比UTF-8短1/3。然而GB18030在非中文的操作系统中,有可能不能识别,其通用性不如UTF-8好。因此仅建议以中文为主的页面采用GB18030编码。

GBK

严格说,GBK不是全能编码(例如对很多西欧字符就支持不好),也不是国际标准。但它支持的字符数量接近于GB18030

对于UTF-16LE(小端字节序的Unicode)格式的文件,我们可以使用多种编程语言库来处理其内容,并将其转换为字符位图或Unicode字符。以下是一些常见的方法: 1. **C++**: 使用`std::wstring`(Windows)或`std::u16string`(跨平台C++11及以上),它们可以直接解析UTF-16LE数据。 ```cpp #include <locale> #include <codecvt> std::vector<uint16_t> utf16_data; // 存储UTF-16LE数据 std::wstring_convert<std::codecvt_utf16<wchar_t>> conv; std::wstring str = std::wstring(utf16_data.begin(), utf16_data.end()); for (wchar_t wc : str) { // 转换为字符位图或其他处理 } ``` 2. **Python**: 使用内置的`codecs`模块可以读取二进制流并解码为Unicode字符串。 ```python with open('file.utf16', 'rb') as f: content = f.read().decode('utf-16-le') # 然后对字符串进行处理 ``` 3. **Java**: Java有`java.nio.charset.StandardCharsets.UTF_16`用于解码UTF-16LE。 ```java InputStream is = new FileInputStream("file.utf16"); BufferedReader br = new BufferedReader(new InputStreamReader(is, StandardCharsets.UTF_16)); String line; while ((line = br.readLine()) != null) { // 处理每行字符串 } ``` Freetype主要用于渲染TrueType或OpenType字体,它是一个图形库,专注于文本排版矢量图像渲染。ASCIIGBK都是基于拉丁字母或汉字的单字节字符集,而UTF-16是Unicode的变种,包含更多的字符。Freetype本身并不直接支持ASCII或GBK,但它可以与Unicode文本交互,如果你的字体包含了这些字符集,那么就可以通过Freetype显示它们。 字符编码(如UTF-16、ASCII、GBK等)字体模块的关系在于,字体通常包含特定字符的点阵信息,而字符编码则是表示这些字符的一种标准方式。当你有一个UTF-16编码的文件时,你需要相应的解码器将字符转换成正确的点阵信息,然后才能由字体引擎(如Freetype)渲染出来。如果没有对应的字体包含所需的所有字符,则可能会显示为替代字符或者无法显示。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值