关于语言及字体知识整理2

什么是Locale?
 
Locale 是指特定于某个国家或地区的一组设定,包括字符集,数字、货币、时间和日期的格式等。由于国家和本地习惯的不同,在处理文字、日期、数字、货币格式等问题都会有所不同, locale 就是用来解决这个问题。 Locale 是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境 , 包括语言 (Language), 地域 (Territory) 和字符集 (Codeset) 。在 Windows 中,每个 Locale 可以用一个 32 位数字表示,记作 LCID 。系统 Locale 决定代码页,用户 Locale 决定数字、货币、时间和日期的格式。
 
中文(中国) 2052   :0804
中文(台湾) 1028   :0404
美国英语      1033   :0409
     1042   :0412
日语         1041   :0411
 
 
什么是代码页?
 
就是各国的文字编码和 Unicode 之间的映射表。
由于不同 ANSI 编码所规定的标准是不相同的,因此,对于一个给定的多字节字符串,我们必须知道它采用的是哪一种编码规则,才能够知道它包含了哪些 字符 。而对于 UNICODE 字符串 来说,不管在什么环境下,它所代表的 字符 内容总是不变的。
在非 Unicode 环境下,由于不同国家和地区采用的字符集不一致,很可能出现无法正常显示所有字符的情况。微软公司使用了代码页( Codepage )转换表的技术来过渡性的部分解决这一问题,即通过指定的转换表将非 Unicode 的字符编码转换为同一字符对应的系统内部使用的 Unicode 编码。可以在“语言与区域设置”中选择一个代码页作为非 Unicode 编码所采用的默认编码方式,如 936 为简体中文 GBK 950 为正体中文 Big5 (皆指 PC 上使用的)。在这种情况下,一些非英语的欧洲语言编写的软件和文档很可能出现乱码。而将代码页设置为相应语言中文处理又会出现问题,这一情况无法避免。从根本上说,完全采用统一编码才是解决之道,但目前上无法做到这一点。
Unicode程序的运行与当前的ANSI代码页没有关系。MBCS程序的运行依赖于ANSI代码页。如果设计者和使用者使用不同的代码页,就可能出现乱码。微软开发的程序大都是Unicode程序,不管我们怎样变换系统Locale,它们总能正常运行。
      每个 Locale 可以对应一个 ANSI 代码页和一个 OEM 代码页。 Win32 API 使用 ANSI 代码页,底层设备使用 OEM 代码页,两者可以相互映射。
 
Code Pages Supported by Windows

SBCS (Single Byte Character Set) Codepages

 
 
 

你可能感兴趣的:(unicode,乱码,字符,locale,区域)