当前位置:  开发笔记 > 编程语言 > 正文

UTF8与UTF16对比char*对比什么?有人向我解释这个烂摊子!

如何解决《UTF8与UTF16对比char*对比什么?有人向我解释这个烂摊子!》经验,为你挑选了3个好方法。

我设法忽略了所有这些多字节字符的东西,但现在我需要做一些UI工作,我知道我在这方面的无知将赶上我!任何人都可以在几段或更少的段落中解释我需要知道什么,以便我可以本地化我的应用程序?我应该使用什么类型(我同时使用.Net和C/C++,我需要Unix和Windows的答案).



1> Dylan Beatti..:

查看Joel Spolsky的绝对最低每个软件开发人员,绝对必须知道Unicode和字符集(没有借口!)

编辑20140523:另外,在YouTube上观看汤姆斯科特的角色,符号和Unicode奇迹 - 它只有不到十分钟的时间,并且是对UTF-8的精彩'黑客'的精彩解释


为一篇慷慨且极具教育意义的文章+1.

2> Brian R. Bon..:

字符编码由一系列代码组成,每个代码都从给定的字符集中查找符号.请在Wikipedia上查看关于字符编码的这篇好文章.

UTF8(UCS)为每个符号使用1到4个字节. 维基百科给出了多字节纲要如何工作的一个很好的概述:

单字节字符的最高位始终为0.

多字节序列的第一个字节的最高有效位确定序列的长度.对于双字节序列,这些最高有效位为110; 1110用于三字节序列,依此类推.

多字节序列中的剩余字节有10个作为它们的两个最高有效位.

UTF-8流既不包含字节FE也不包含FF.这可以确保UTF-8流看起来永远不会像以U + FEFF(字节顺序标记)开头的UTF-16流

该页面还显示了每种字符编码类型的优缺点之间的比较.

UTF16(UCS2)

每个符号使用2个字节到4个字节.

UTF32(UCS4)

每个符号始终使用4个字节.

char只表示一个字节的数据,而不是实际的编码.它与UTF8/UTF16/ascii不相似.char*指针可以指任何类型的数据和任何编码.

STL:

stl的std :: wstring和std :: string都不是为UTF-8和UTF-16等可变长度字符编码而设计的.

如何实施:

看看iconv库. iconv是一个强大的字符编码转换库,由libxml等项目使用(Gnome的XML C解析器)

关于字符编码的其他重要资源:

tbray.org的字符与字节

IANA字符集

www.cs.tut.fi是关于代码问题的教程

绝对最低每个软件开发人员绝对必须知道Unicode和字符集(没有借口!)(@Dylan Beattie首先提到)


也许语言具有类型"char"的事实只是字符编码更简单时的遗迹.使用"char"或"wchar"或任何固定宽度类型来表示字符可能不是一个好主意.也许新语言不应该有"char",而只是uint8_t或byte.我通常使用uint8_t*或void*来指向我认为是"字节包"的数据,就像字符串一样,我将编码存储在其他变量中.
布莱恩,这是错的.UTF-16使用2到4个字节.只有UTF-32具有固定的字节宽度(= 4).大多数UTF-16实现只是不扩展到BMP之外,因此只支持有限的字符集.

3> mmalc..:

收到的智慧表明Spolsky的文章忽略了几个重点.

建议本文更完整: Unicode®标准:技术介绍

本文也是一个很好的介绍:Unicode基础知识

后者特别概述了Unicode的字符编码形式和方案.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有