[入门] 有关字符和字符串的问题
Colorful
2007-07-01
你可能误解了。
D编译器是内置支持UTF8的,phobos标准库可能某些函数有问题。现在的基础工作比较滞后。 BTW,不管哪种语言,让char类型支持UTF8都不太可能。 D语言中char是1Byte,java,C#中char是2Byte,而UTF8编码除了前256个字符跟ASCII码一样之外,其他字符有的以1Byte表示,有的以2Byte表示,还有很多3Byte,4Byte表示的字符,俺们的汉字编码在UTF8中有相当一部分是3Byte的。哪种语言只用char类型是没法表示UTF8的。除非它的char类型表示4Byte,但是这样的char跟UCS-4又有什么区别。只有char[],即字符串才能支持UTF8。 |
|
qiezi
2007-07-02
codekitten 写道 原来支持UTF-8就是这么个支持法?
真是服了Walter,你就一个字节如何UTF-8啊? 唉,D语言啊,想说爱你不容易 搞清楚什么叫UTF-8再感叹吧。 |
|
oldrev
2007-07-03
我看字符串最后还是非得要一个类来处理,而不是char[]。现在的alias 已经朝这个方向走了一步
|
|
heromyth
2007-07-04
与外界的各种形式的编码数据的交换的确是D语言的痛。痛在没有一个好的接口库支持。
在内部处理是没什么多大问题的。 |
|
Liner
2007-07-05
UTF-8是一种编码格式,每个字节8bit,主要是为了兼容ASCII和网络传输(没有高低位的差别)。一般在外部保存也是用8bit字节的,大多数中文都是3字节,有点浪费(相对于gbk的双字节)。
如果要在程序内部操作字符串中的字符,直接用wchar[]就可以了——用数组下标定位即可。UTF-8不是字符串的概念,只是“字节序列”。 不知道D内部是否可以直接支持从char[]到wchar[]的转换,如果可以就很爽了。 |
|
oldrev
2007-07-06
Liner 写道 UTF-8是一种编码格式,每个字节8bit,主要是为了兼容ASCII和网络传输(没有高低位的差别)。一般在外部保存也是用8bit字节的,大多数中文都是3字节,有点浪费(相对于gbk的双字节)。
如果要在程序内部操作字符串中的字符,直接用wchar[]就可以了——用数组下标定位即可。UTF-8不是字符串的概念,只是“字节序列”。 不知道D内部是否可以直接支持从char[]到wchar[]的转换,如果可以就很爽了。 UTF-16也不一定两字节就是一个字符 |
|
qiezi
2007-07-06
oldrev 写道 Liner 写道 UTF-8是一种编码格式,每个字节8bit,主要是为了兼容ASCII和网络传输(没有高低位的差别)。一般在外部保存也是用8bit字节的,大多数中文都是3字节,有点浪费(相对于gbk的双字节)。
如果要在程序内部操作字符串中的字符,直接用wchar[]就可以了——用数组下标定位即可。UTF-8不是字符串的概念,只是“字节序列”。 不知道D内部是否可以直接支持从char[]到wchar[]的转换,如果可以就很爽了。 UTF-16也不一定两字节就是一个字符 这就要根据实际情况去选了。如果你只是处理英文,用char[]就行,如果处理BMP字符,用wchar[],处理其它平面,用dchar[]就行。 另: char[] 转到 wchar[],目前phobos只支持utf-8,其它编码在windows上可以使用std.windows.charset里面的方法,linux上可能要自己找了,也可以使用iconv。 |
|
oldrev
2007-07-06
qiezi 写道 oldrev 写道 Liner 写道 UTF-8是一种编码格式,每个字节8bit,主要是为了兼容ASCII和网络传输(没有高低位的差别)。一般在外部保存也是用8bit字节的,大多数中文都是3字节,有点浪费(相对于gbk的双字节)。
如果要在程序内部操作字符串中的字符,直接用wchar[]就可以了——用数组下标定位即可。UTF-8不是字符串的概念,只是“字节序列”。 不知道D内部是否可以直接支持从char[]到wchar[]的转换,如果可以就很爽了。 UTF-16也不一定两字节就是一个字符 这就要根据实际情况去选了。如果你只是处理英文,用char[]就行,如果处理BMP字符,用wchar[],处理其它平面,用dchar[]就行。 另: char[] 转到 wchar[],目前phobos只支持utf-8,其它编码在windows上可以使用std.windows.charset里面的方法,linux上可能要自己找了,也可以使用iconv。 如果用到了字符处理,dchar是最方便的,但是一般用途的字符串处理,比如路径之类,utf-8就很好 phobos 支持 UTF-8/16/32 的互换,就是gb2312,gbk这些非国际标准比较麻烦,需要用到iconv。 |
|
Liner
2007-07-06
oldrev 写道 如果用到了字符处理,dchar是最方便的,但是一般用途的字符串处理,比如路径之类,utf-8就很好
phobos 支持 UTF-8/16/32 的互换,就是gb2312,gbk这些非国际标准比较麻烦,需要用到iconv。 32位长的dchar有些太浪费了吧,,呵呵。Widnows下的Unicode就只是16bit的。16位的基本面已经容纳了目前全球各种语言中足够的文字了,除了一些很特殊的需求,一般不需要用到32位的(Linux下的Unicode好像是32位了——考虑得够长远!)。 能UTF-8/16/32互换,已经很爽了!——支持国标(呵呵,是 国际 *_) |
相关讨论
相关资源推荐
- The Humane Interface, New Directions For Designing Interactive Systems
- 《人本界面》读书笔记
- The Dearbookian #20040422 The Humane Interface, The Inhumane Translation [评《人本界面》]
- 谷歌翻译SDK (Google Translate SDK)的使用
- 无法翻译此网页的解决办法 - GoogleTranslateIpCheck
- 【工具】Idea翻译插件中Google翻译修复
- PDF的google翻译V1.2
- 基于机器视觉的自动分拣系统
- 谷歌翻译api
- 谷歌翻译实现