鎴戜篃阆囧埌杩囧拰浣犲悓镙风殑闂��
鎴戠殑瑙e喅锷炴硶鏄�笅杞戒竴涓猀Q2008
鍦ㄧ橱闄嗙獥鍙i€夋嫨
"璁剧疆"--绫诲瀷阃夋嫨"HTTP浠g悊"--鍦板潃10.0.0.172 绔�彛80 鐢ㄦ埛鍜屽瘑镰佷负绌�
鍐岖偣鍑�"娴奶瘯" 濡傛灉鏄剧ず浠g悊链嶅姟鍣ㄦ�甯稿氨OK
甯屾湜瀵逛綘链夌敤
下面的内容转自我的百度空间,是我收集来的,在这里看起来如果觉得排版不好,可以直接看我的空间内的文章:http://hi.baidu.com/newkedison/blog/item/1c7d2c392cc192f63b87ce12.html
有关UTF-8的一些资料2008年06月13日 星期五 08:17一, 最重要的,UTF-8和Unicode的转换
UTF-8 编码是一种被广泛应用的编码,这种编码致力于把全球的语言纳入一个统一的编码,目前已经将几种亚洲语言纳入。UTF 代表 UCS Transformation Format.
UTF-8 采用变长度字节来表示字符,理论上最多可以到 6 个字节长度。UTF-8 编码兼容了 ASC II(0-127), 也就是说 UTF-8 对于 ASC II 字符的编码是和 ASC II 一样的。对于超过一个字节长度的字符,才用以下编码规范:
左边第一个字节1的个数表示这个字符编码字节的位数,例如两位字节字符编码样式为为:110xxxxx 10xxxxxx; 三位字节字符的编码样式为:1110xxxx 10xxxxxx 10xxxxxx.;以此类推,六位字节字符的编码样式为:1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx。 xxx 的值由字符编码的二进制表示的位填入。只用最短的那个足够表达一个字符编码的多字节串。例如:
Unicode 字符: 00 A9(版权符号) = 1010 1001, UTF-8 编码为:11000010 10101001 = 0x C2 0xA9; 字符 22 60 (不等于符号) = 0010 0010 0110 0000, UTF-8 编码为:11100010 10001001 10100000 = 0xE2 0x89 0xA0
以上转换例子已经确认是正确的,不用怀疑,如果看不懂请再仔细想想
Unicode编码和utf-8编码之间的对应关系表
The table below summarizes the format of these different octet types.
The letter x indicates bits available for encoding bits of the
character number.
Char. number range | UTF-8 octet sequence
(hexadecimal) | (binary)
--------------------+---------------------------------------------
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx //////A/////////
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
这是一个Unicode编码和utf-8编码之间的对应关系表。中文的Unicode编码范围在0000 0800-0000 FFFF 中。
二, 关于BOM
UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?
Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:
在UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。
这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。
UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAK SPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。
三, VB实现UTF-8转Unicode的函数
1.不使用API
Function Utf8ToUnicode(ByRef Utf() As Byte) As String
Dim utfLen As Long
utfLen = -1
On Error Resume Next
utfLen = UBound(Utf)
If utfLen = -1 Then Exit Function
On Error GoTo 0
Dim i As Long, j As Long, k As Long, N As Long
Dim B As Byte, cnt As Byte
Dim Buf() As String
ReDim Buf(utfLen)
i = 0
j = 0
Do While i <= utfLen
B = Utf(i)
If (B And &HFC) = &HFC Then
cnt = 6
ElseIf (B And &HF8) = &HF8 Then
cnt = 5
ElseIf (B And &HF0) = &HF0 Then
cnt = 4
ElseIf (B And &HE0) = &HE0 Then
cnt = 3
ElseIf (B And &HC0) = &HC0 Then
cnt = 2
Else
cnt = 1
End If
If i + cnt - 1 > utfLen Then
Buf(j) = "?"
Exit Do
End If
Select Case cnt
Case 2
N = B And &H1F
Case 3
N = B And &HF
Case 4
N = B And &H7
Case 5
N = B And &H3
Case 6
N = B And &H1
Case Else
Buf(j) = Chr(B)
GoTo Continued:
End Select
For k = 1 To cnt - 1
B = Utf(i + k)
N = N * &H40 + (B And &H3F)
Next
Buf(j) = ChrW(N)
Continued:
i = i + cnt
j = j + 1
Loop
Utf8ToUnicode = Join(Buf, "")
End Function
2. 使用API (包括Unicode转UTF-8)
Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
Private Const CP_UTF8 = 65001
Function Utf8ToUnicode(ByRef Utf() As Byte) As String
Dim lRet As Long
Dim lLength As Long
Dim lBufferSize As Long
lLength = UBound(Utf) - LBound(Utf) + 1
If lLength <= 0 Then Exit Function
lBufferSize = lLength * 2
Utf8ToUnicode = String$(lBufferSize, Chr(0))
lRet = MultiByteToWideChar(CP_UTF8, 0, VarPtr(Utf(0)), lLength, StrPtr(Utf8ToUnicode), lBufferSize)
If lRet 0 Then
Utf8ToUnicode = Left(Utf8ToUnicode, lRet)
End If
End Function
Function UnicodeToUtf8(ByVal UCS As String) As Byte()
Dim lLength As Long
Dim lBufferSize As Long
Dim lResult As Long
Dim abUTF8() As Byte
lLength = Len(UCS)
If lLength = 0 Then Exit Function
lBufferSize = lLength * 3 + 1
ReDim abUTF8(lBufferSize - 1)
lResult = WideCharToMultiByte(CP_UTF8, 0, StrPtr(UCS), lLength, abUTF8(0), lBufferSize, vbNullString, 0)
If lResult 0 Then
lResult = lResult - 1
ReDim Preserve abUTF8(lResult)
UnicodeToUtf8 = abUTF8
End If
End Function
Private Sub Command1_Click()
Dim byt() As Byte
byt = UnicodeToUtf8("测试")
Debug.Print Hex(byt(0)) & Hex(byt(1)) & Hex(byt(2))
Debug.Print Utf8ToUnicode(byt())
End Sub
阃夋嫨链?寘鍚?main 绫诲瀷
哇,传说中的乱码.main方法怎么了?
关于往河北省石家庄市经贸大学附属中学的学生寄东西的一些问题 急...
如果是快递,中通,EMS,宅急送可以送到学校里边,电话通知取包裹,学生过去拿就直接送到学生本人手里了。
相爱的两个人不能在一起 有什么歌可以表达?
为什么相爱的人不能在一起 每当我在与你相起你的时候 不知道你在哪头 心里面有许多许的爱与愁 不知是否是永远的伤口 当你扔下我一个人说走就走 其实我也知道你很难受 只是这个世界把你我分两头 割断情思与占有 想起你我相爱的时候 想起只能在电话里头 我真的好伤悲好难受 不知道什么时候才是尽...
qq下载好了,不能上,连接超时请重试错误代码82945,跪求答案。_百度知 ...
一般情况是DNS服务器不能正常解析域名造成。解决办法是更换新的DNS服务器,或者等待出现故障的DNS服务器工作正常。有时QQ也会什么都不提示,只说是无法连接到服务器,都是这类毛病。此外,还有一种情况,也是DNS服务器出现故障的表现:一部分网页能正常打开,另一部分网页不能正常打开,出现此种情况的话...
早上7点15一号航站楼的飞机,6点从东直门坐机场快轨,来得及吗,可是快轨...
1号航站楼和二号是在一起的,不像T3是分开的,机场快轨坐到二号航站楼,下车后根据提示可以根据机场提示牌找到1号楼与2号航站楼的连接通道,通过连接通道就可以到T1了。另外T1航站楼比较小,而且全是国内航班,所以海航集团的各航空公司在T1都是起飞前20分钟停止办理登机手续。6:30左右到机场,6...
我该怎么办???
我觉得你们两个都是好青年,你讲究自愿,充分尊重女朋友的心愿,不搞强迫行为;她自重自爱,不擅自以身相许。这说明你们都很有理智,是一对难得的好男好女。其实爱最讲究的就是心与心的交换,不是肉体的奉献。有很多的青年男女,在恋爱种都坚持爱的底线,把初夜权留在洞房花烛夜来行使,从而获得了...
阃夋嫨棰?20镙囨湁6浼?.5鐡︾殑灏忕选择题 标有6伏1.5瓦的小灯泡如图...
6伏1.5瓦的小灯 可以算出来电阻为U*U\/P=6*6\/1.5=24 其他乱码了
我是精神病还是大脑物质问题
有可能真的有虫!在道教记录中,有三尸九虫的说法,及百虫!分别食人脑髓,心胸,及下部。按古人的记录说法是。使人梦而起念(虫作用于人的大脑,使人以为是自已在起念,但这个虫有点是通灵了的),至于大脑中有虫并不奇怪,有个视频,讲的就是现代开颅手术,竟发现一白虫,引为奇事,一查根源...
怎样备份QQ资料[错误115713】
鎴戠殑瑙e喅锷炴硶鏄�笅杞戒竴涓猀Q2008 鍦ㄧ橱闄嗙獥鍙i 夋嫨 "璁剧疆"--绫诲瀷阃夋嫨"HTTP浠g悊"--鍦板潃10.0.0.172 绔�彛80 鐢ㄦ埛鍜屽瘑镰佷负绌�鍐岖偣鍑�"娴奶瘯" 濡傛灉鏄剧ず浠g悊链嶅姟鍣ㄦ�甯稿氨OK 甯屾...
我想换个显卡 不知道换什么的好 CPU core(TM)2 4300 内存1G 显卡GoForce...
推荐 昂达的 9600GSO (老版的384M显存 G92核心 192bit的位宽 ) 新出的9600GSO由于厂家为提高利润 核心不及老版的好 ATI的显卡推荐 蓝宝石的 4670 黄金版 频率很高 512M显存 昂达 9600GSO已经停产,96个流处理器.比较难买到.要注意别买到缩水版的,要G92核心 2楼的回答乱来 即使有钱 换了个GTX...