[入门] 有关字符和字符串的问题

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互换,已经很爽了!——支持国标(呵呵,是 国际 *_)
Global site tag (gtag.js) - Google Analytics