宽字符集in linux and windows
来源:互联网 发布:mac bootcamp 删除 编辑:程序博客网 时间:2024/05/23 12:06
iconv -f GBK -t UTF-8 test.cc > testu.cc
不转,会报错 test.cc:7: error: converting to execution character set: Invalid or incomplete multibyte or wide character
- $ cat ws.cc
- #include <string>
- #include <iostream>
- int main()
- {
- std::wstring wstr = L"世界你好!";
- std::wcout.imbue( std::locale("chs") );
- std::wcout << wstr << std::endl;
- return 0;
- }
- $ g++ ws.cc -o ws
- $
1、Linux 的内部字符串数据处理都是 utf8 。这个是标准。2、外部字符串是 locale 编码,也就是设置的 locale 系统环境变量的编码。3、输入 locale2utf8 ,输出 utf82local 。这个是 Linux 的标准处理。不过输出输入还是根据环境考虑。没有一种算法可以明确检测一段文字的编码。windows 下面都是借助字符串前置的识别码决定的。
linux系统字符集讲解
(2009-12-02 14:23:01)字符集
locale
gbk
unicode
lc_ctype
it
分类:Linux摘要:本文详细说明了linux系统配置中locale的相关概念。
locale
一、为什么要设定locale
在下文本人会偶尔把字符集比喻成密码本,个人觉得对于一些东西比较容易理解,假如你不习惯的话,把全文copy到任何文本编辑器,用字符集替换密码本即可。
那有时候网页显示乱码或者都是方框是怎么回事呢?个人认为,显示乱码是因为设定的字符集不对(或者没有相应的字符集),例如网页是用UTF-8编码的,你非要用GB2312去看,而系统根据GB2312去找字体,然后在屏幕上显示,当然是一堆的乱码,也就是说你用一个错误的密码本去翻译发给你的电报,当然内容那叫一个乱;至于有些时候浏览的网页能显示一部分汉字,但有很多的地方是方框,能够显示汉字说明浏览器已经正确的判断出了网页的编码,并在字体库里面找到了相应的文字,但是并不是每个字体库都包含某个字符集全部的字体的缘故,有些时候会显示不完全,找一个比较全的支持较多字符集的字体就可以了。
既然我能够浏览中文网页,那为什么我还要设定locale呢?
其实你有没有想过这么一个问题,为什么gentoo官方论坛上中文论坛的网页是用UTF-8编码的(虽然大家一直强烈建议用GB2312编码),但是新浪网就是用GB2312编码的呢?而Xorg的官方网页竟然是ISO-8859-15编码的,我没有设定这个locale怎么一样的能浏览呢?这个问题就像是你有所有的密码本,不论某个网站是用什么字符集编码的,你都可以用你手里的密码本把他们翻译过来,但问题是虽然你能浏览中文网页,但是在整个操作系统里面流动的还是英文字符。所以,就像你能听懂英语,也能听懂中文。
当你决定要写什么东西的时候,首先要决定的一件事情是用那种语言,对于计算机来说就是你要是用哪一种字符集,你就必须告诉你的linux系统,你想用那一本密码本去写你想要写的东西。知道为什么需要用GB2312字符集去浏览新浪了吧,因为新浪的网页是用GB2312写的。
为了让你的Linux能够输入中文,就需要把系统的locale设定成中文的(严格说来是locale中的语言类别LC_CTYPE
二、到底什么是locale?
locale这个单词中文翻译成地区或者地域,其实这个单词包含的意义要宽泛很多。Locale是根据计算机用户所使用的语言,所在国家或者地区,以及当地的文化传统所定义的一个软件运行时的语言环境。
这个用户环境可以按照所涉及到的文化传统的各个方面分成几个大类,通常包括用户所使用的语言符号及其分类(LC_CTYPE),数字
所以说,locale就是某一个地域内的人们的语言习惯和文化传统和生活习惯。一个地区的locale就是根据这几大类的习惯定义的,这些locale定义文件放在/usr/share/i18n/locales目录下面,例如en_US,
对于de_DE@euro的一点说明,@后边是修正项,也就是说你可以看到两个德国的locale:
上面我们说到了zh_CN.GB18030的前半部分,后半部分是什么呢?大部分Linux用户都知道是系统采用的字符集。
三、什么是字符集?
字符集就是字符,尤其是非英语字符在系统内的编码方式,也就是通常所说的内码,所有的字符集都放在/usr/share/i18n/charmaps,所有的字符集也都是用Unicode编号索引的。Unicode用统一的编号来索引目前已知的全部的符号。而字符集则是这些符号的编码方式,或者说是在网络传输,计算机内部通信的时候,对于不同字符的表达方式,Unicode是一个静态的概念,字符集是一个动态的概念,是每一个字符传递或传输的具体形式。就像
四、zh_CN.GB2312到底是在说什么?
Locale
1、我说中文,身处中华人民共和国,使用国标2312字符集来表达字符。
2、我说中文,身处中华人民共和国,使用国标18030字符集来表达字符。
3、我说中文,身处中华人民共和国台湾省,使用国标Big5字符集来表达字符。
4、我说英文,身处大不列颠,使用ISO-8859-1字符集来表达字符。
5、我说德语,身处德国,使用UTF-8字符集,习惯了欧洲风格。
注意不是[email] de_DE@euro.UTF [/email]-8,所以完全的locale表达方式是
生成的locale放在/usr/lib/locale/目录中,并且每个locale都对应一个文件夹,也就是说创建了[email]de_DE@euro.UTF [/email]-8
五、怎样去自定义locale?
在gentoo生成locale还是很容易的,首先要在USE里面加入userlocales支持,然后编辑locales.build文件,这个文件用来指示glibc生成locale文件。
File:
zh_CN/GB18030
上面是我的locales.build文件,依次的说明是这样的:
en_US/ISO-8859-1:生成名为en_US的locale,采用ISO-8859-1字符集,并且把这个locale作为英文_美国locale类的默认值,其实它和en_US.ISO-8859-1/ISO-8859-1没有任何区别。
en_US.UTF-8/UTF-8:生成名为en_US.UTF-8的locale,采用UTF-8字符集。
zh_CN/GB18030:生成名为zh_CN的locale,采用GB18030字符集,并且把这个locale作为中文_中国locale类的默认值,其实它和zh_CN.GB18030/GB18030没有任何区别。
zh_CN.GBK/GBK:生成名为zh_CN.GBK的locale,采用GBK字符集。
关于默认locale,默认locale可以简写成en_US或者zh_CN的形式,只是为了表达简单而已没有特别的意义。
Gentoo在locale定义的时候掩盖了一些东西,也就是locale的生成工具:localedef。
$localedef
上面的定义方法和在locales.build中设定zh_CN.UTF-8/UTF-8的结果是一样一样的。
六、locale的五脏六腑
刚刚生成了几个locale,但是为了让它们生效,必须告诉Linux系统使用那(几)个locale。这就需要对locale的内部机制有一点点的了解。在前面我已经提到过,locale把按照所涉及到的文化传统的各个方面分成12个大类,这12个大类分别是:
其中,与中文输入关系最密切的就是
LC_CTYPE
LC_CTYPE
copy
class
在en_US的locale定义中,并没有定义汉字,所以汉字不是有效字符。所以如果要输入中文必须使用支持中文的locale,也就是zh_XX,如zh_CN,zh_TW,zh_HK等等。
另外非常重要的一点就是这些分类是彼此独立的,也就是说LC_CTYPE,LC_COLLATE和
七、怎样设定locale呢?
设定locale就是设定12大类的locale分类属性,即
所以,locale是这样设定的:
- 宽字符集in linux and windows
- Dynamic linking in Linux and Windows
- getResourceAsStream for "/" in windows and linux
- ORACLE 字符集改变 in linux
- windows与linux字符集转换
- explicit call dynamic library in windows and linux platform
- Using Android monkeyrunner from Eclipse, both in Windows and Linux!
- Using Android monkeyrunner from Eclipse, both in Windows and Linux!
- LESSON 2 BASIC COMMANDS IN LINUX AND WINDOWS (LINUX 和 WINDOWS的基本命令) part I
- LESSON 2 BASIC COMMANDS IN LINUX AND WINDOWS (LINUX 和 WINDOWS的基本命令) part II
- LESSON 2 BASIC COMMANDS IN LINUX AND WINDOWS (LINUX 和 WINDOWS的基本命令) part III
- LESSON 2 BASIC COMMANDS IN LINUX AND WINDOWS (LINUX 和 WINDOWS的基本命令) part IV
- Java 中的字符集 (控制台,windows,linux)
- Linux and Windows
- Windows,Unix and Linux
- Linux and windows Porting
- linux and windows
- windows 字符集
- 在一个大数组中有且仅有两个数相同,怎样尽快找出这两个数(未完成)
- 【Linux菜鸟成长记(八)】Ubuntu下搭建Java开发环境之安装JDK
- Google的收购扩张史
- 黑莓开发之Helloword
- vc控件的赋值问题研究
- 宽字符集in linux and windows
- Android GSM驱动模块(rild)初始化
- SQL索引
- 创建并使用DBLink
- 电脑使用小技巧
- 旅行照片剪辑--北京篇
- 人际关系
- 迅雷Java上机题
- 读万卷书+行万里路+阅人无数+名师指路+自己悟