首页编程unicode Unicode字符是什么

unicode Unicode字符是什么

编程之家2023-11-01207次浏览

这篇文章给大家聊聊关于unicode,以及Unicode字符是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。

unicode Unicode字符是什么

什么是Unicode

对于英文来说,ascii码0-127就足以代码所有字符,对于中文而言,则必须使用两个字节(byte)来代表一个字符,具第一个字节必须大于127(所以我们有许程序判断中文都是以ascii码大于127作为条件)

以上用两个字节来表示一个中文的方式,在习惯上称为双字节(即DBCS:Double-ByteCharacterSet),而相对之下,英文的字符码就称为单字节SBCS(Single-ByteCharacterSet)。

虽然双字节(DBCS)足以解决中英文字符混合使用情况,但对于不同字符系统而言,必须经过字符码转换,非常麻烦。例如:中英文混合情况,日文,韩文等等。

为解决这个问题,Apple,Xerox,Microsoft,IBM,Novell,Borland...很多公司联合起来制订了一套可以适用于全世界所有国家的字符码,就称为Unicode

Unicode的特点是:

不管哪一国的字符码均以两个Byte表示,例如"A"在Unicode则是16进制41和00的组合,即4100,高位41(转换为Ascii码即是65=A),

unicode Unicode字符是什么

WindowsNT/2000以Unicode来表示字符集,例如你可以看到MSSQLServer中产生的SQL文件可以选择是以Unicode来保存还是以普通格式来保存,如果你以Unicode保存,则在95/98平台许多软件均无法正确读出其格式。

同时你还可以注意到95/98中API定义,许多名称结尾是有一个A的,例如

WriteProfileStringA

而在NT/2000操作系统中,提供了两套API,另外一个命令是WriteProfileStringW,以W结尾的API只适用于NT/2000。(在NT中使用以W结尾的API函数效率比A结尾的要快,因为省去了Unicode和DBCS/SBCS的转换过程)

这样我们经常要用到的判断字符串长度的函数,在NT和95/98下执行结果不同,如下:(下面代码适合于VB,ASP)

95/98中:

unicode Unicode字符是什么

len("abc中国")返回7(因为每个中文作为两个Ascii码来看)

nt/2000中:

len("abc中国")返回5(因为每个字符都作为一个Unicode来看)

明天将介绍如何在VB/NT环境下使len("abc中国")返回长度等于7

(PB不存在以上情况,除非你在NT下使用PB的Unicode版本,通常我们大家使用的均是PB的Windows32位版本)

unicode编码是什么

Unicode是一种字符编码方案,它为每种语言中的每个字符都设定了统一唯一的二进制编码,以实现跨语言、跨平台进行文本转换、处理的要求。

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。目前的Unicode字符分为17组编排,0x0000至0x10FFFF,每组称为平面(Plane),而每平面拥有65536个码位,共1114112个。

主要内容

为了使Unicode与已存在和广泛使用的旧有编码互相兼容,尤其是差不多所有电脑系统都支援的基本拉丁字母部分,所以Unicode的首256字符仍旧保留给ISO8859-1所定义的字符,使既有的西欧语系文字的转换不需特别考量。

另方面因相同的原因,Unicode把大量相同的字符重复编到不同的字符码中去,使得旧有纷杂的编码方式得以和Unicode编码间互相直接转换,而不会遗失任何资讯。

举例来说,全角格式区段包含了主要的拉丁字母的全角格式,在中文、日文、以及韩文字形当中,这些字符以全角的方式来呈现,而不以常见的半角形式显示,这对竖排文字和等宽排列文字有重要作用。

Unicode字符是什么

Unicode是一种重要的交互和显示的通用字符编码标准,它覆盖了美国、欧洲、中东、非洲、印度、亚洲和太平洋的语言,以及古文和专业符号。Unicode允许交换、处理和显示多语言文本以及公用的专业和数学符号。它希望能够解决多语言的计算,如不同国家的字符标准,但并不是所有的现代或古文都能够获得支持。

Unicode字符可以适用于所有已知的编码。Unicode是继 ASCII(美国国家交互信息标准编码)字符码后的一种新字符编码,它为每一个符号定义一个数字和名称,并指定字符和它的数值(码位),以及该值的二进制位表示法,通过一个十六进制数字和前缀(U)定义一个16位的数值,如:U+0041表示 A,其唯一的名称是 LATIN CAPITAL LETTER A。但请注意:JavaScript 1.3之前的版本并不支持 Unicode编码。

Unicode与 ASCII和 ISO的兼容性

Unicode兼容于 ASCII字符并被大多数程序所支持,前128个 Unicode码同 ASCII码具有同样的字节值;Unicode字符从 U+0020到 U+007E等同与 ASCII码的 0x20到 0x7E,不同于支持拉丁字母的7位 ASCII,Unicode对每个字符进行16位值的编码设置,它允许几万个字符,例如 Unicode 2.0版包含 38,885个字符,它也可以进行扩展,如 UTF-16允许用16位字符组合为一百万或更多的字符,UTF将编码转换为真实的二进制位。

Unicode完全兼容于国际标准 ISO/IEC 10646-1; 1993,它是 ISO 10646的一个子集,并支持用两个八进制数的 ISO UCS-2(Universal Character Set)。JavaScript 1.3版本对 Unicode的支持意味着您可以任意地在程序中使用本地的字符以及特殊的科学符号。Unicode提供了一种标准的方法来编码多语言文本,并且因为它兼容于 ASCII,您也可以随意使用 ASCII字符。

Unicode转义序列

您可以在字符直接量中使用 Unicode转义序列,该转义序列由六个 ASCII字符组成:\u加上一个四个数值的十六进制数。如:\u00A9表示版权符号。JavaScript里的每一个 Unicode转义序列由一个字符所对应解释。下表是经常使用的特殊字符和它们的 Unicode值。

类别 Unicode值名称格式名称

空白(whitespace)\u0009制表符<TAB>

\u000B垂直制表符<VT>

\u000C换页符<FF>

\u0020空格<SP>

行结束符值\u000A换行符<LF>

\u000D回车符<CR>

其它 Unicode转义序列值\u000b退格符<BS>

\u0009水平制表符<HT>

\u0022双引号"

\u0027单引号'

\u005C反斜杠/

JavaScript对 Unicode转义序列的用法不同于 Java。首先,在 JavaScript中转义序列并没有解释为一个特殊的字符。例如:在一个字符串中的换行符转义序列在函数被解译前并不会终止该字符串,如果在注释中使用转义序列 JavaScript将会忽略它。在 Java中,如果一个转义序列被用于一个单独的注释行,它将被解译为一个 Unicode字符。对于一个字符串直接量,Java编译器将首先解译转义序列。例如:如果在 Java中使用一个换行符(\u000A),它将会终止该字符串,在 Java中将导致一个错误,因为在字符串直接量中不允许换行,您必须使用\n符;而在 JavaScript中,这两者之间并没有区别。

用 Unicode显示字符

您可以在不同的语言中使用 Unicode来显示字符或专业符号,但这需要一个客户端能够支持 Unicode,例如 Netscape Navigator 4.x,并且客户端还得支持 Unicode字体以及操作平台的支援。例如 Windows 95它只支持部分的 Unicode,另外,为了输入非 ASCII字符,您还得有支持所有 Unicode字符的输入设备,一个标准的扩展键盘不能够做到这一点,但我们可以用 Unicode转义序列来输入 Unicode字符。如果您还需了解 Unicode更多的信息,请参见 Unicode Consortium Web site 2.0版。

什么叫 “Unicode格式 字符”

UTF8== Unicode Transformation Format-- 8 bit

是Unicode传送格式。即把Unicode文件转换成BYTE的传送流。

UTF8流的转换程序:

Input: unsigned integer c- the code point of the character to be encoded(输入一个unicode值)

Output: byte b1, b2,b3, b4- the encoded sequence of bytes(输出四个BYTE值)

Algorithm(算法):

if(c<0x80)

b1= c>>0& 0x7F| 0x00

b2= null

b3= null

b4= null

else if(c<0x0800)

b1= c>>6& 0x1F| 0xC0

b2= c>>0& 0x3F| 0x80

b3= null

b4= null

else if(c<0x010000)

b1= c>>12& 0x0F| 0xE0

b2= c>>6& 0x3F| 0x80

b3= c>>0& 0x3F| 0x80

b4= null

else if(c<0x110000)

b1= c>>18& 0x07| 0xF0

b2= c>>12& 0x3F| 0x80

b3= c>>6& 0x3F| 0x80

b4= c>>0& 0x3F| 0x80

end if

=====================

unicode是一种编码表格,例如,给一个汉字规定一个代码。类似 GB2312-1980, GB18030等,只不过字集不同。

=====================

一个unicode码可能转成长度为一个BYTE,或两个,三个,四个BYTE的UTF8码,取决于unicode码的值。英文unicode码因为值小于0x80,只要用一个BYTE的UTF8传送,比送unicode两个BYTEs快。

UTF8是为传送unicode而想出来的“再编码”方法罢了。

UTF8转unicode用我上面给的程序反算即可。

感谢您的阅读!希望本文对解决您关于unicode的问题有所帮助。如果您还有其他疑问,欢迎随时向我们提问。

codeigniter框架(CodeIgniter与ThinkPHP两个框架各自有什么优势)河北服务器租用,服务器租用哪里好服务器托管