当前位置:编程学习 > VB >>

关于汉字的ASCII码,有四个疑问。请高手解答。

1.听说strings.asc()可以求汉字的ASCII码。可是又听说ASCII码是8位的,而汉字是16位的。那这个函数求的到底是不是ASCII码?
2.听说汉字的strings.asc()<0,为什么?strings.asc()>0的那些编码都给谁了?从哪可以查?
3.有没有求utf-8码的函数?
4.请推荐一些详解各种编码的书和帖子。 --------------------编程问答-------------------- ⒈ 要说真正的ASCII码(美国信息交换标准码),那应该是7位的,只有127个编码。
  但一般情况下说的ASCII码,实际指的应该是“ANSI码”,加上‘扩展字符集’,共255个字符编码。
  对于汉字来说,因为汉字个数太多,8位根本无法表示,于是就用两个字节来表示一个汉字编码。
  “汉字的ASCII码”实际上就是汉字的“GB2312编码”。
  在VB中,返回字符串ASCII码的函数是 ASC(),格式为 ASC(String)。
  如果String 是一个多字符的字符串,它只返回第一个字符的ASCII码,后面的字符忽略。

⒉ 汉字的GB2312编码用两个字节来表示,在VB中就是一个“整数”。
  因为这两个字节的最高位都是1,对整数来说,就是这个数的‘符号位’是1,它表示这个数是‘负数’。
  因此,用ASC()函数汉字返回的编码值,必然是<0的。
  >0那些编码给谁了? 在⒈中已经说了……
  就是那些西文字符……。

⒊ VB中没有求UTF-8的函数。可以用API函数来把字符串转换成UTF-8编码。
  你也可以用ASCW()先得到Unicode编码,再自己转成UTF-8格式。 ^_^

⒋ 自己百度吧……

--------------------编程问答-------------------- ASCW可以获取汉字的UniCode编码 --------------------编程问答--------------------
引用 1 楼  的回复:
⒈ 要说真正的ASCII码(美国信息交换标准码),那应该是7位的,只有127个编码。
  但一般情况下说的ASCII码,实际指的应该是“ANSI码”,加上‘扩展字符集’,共255个字符编码。
  对于汉字来说,因为汉字个数太多,8位根本无法表示,于是就用两个字节来表示一个汉字编码。
  “汉字的ASCII码”实际上就是汉字的“GB2312编码”。
  在VB中,返回字符串ASCII码的函数……

xuexi --------------------编程问答-------------------- VB新上手,来学习下 --------------------编程问答-------------------- 刚学VB,来学习下 --------------------编程问答-------------------- 3.
Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByRef lpMultiByteStr As Any, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
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 Long, ByVal lpUsedDefaultChar As Long) As Long
'常用的代码页:
const cpUTF8   =65001
const cpGB2312 =  936
const cpGB18030=54936
const cpUTF7   =65000
Function MultiByteToUTF16(UTF8() As Byte, CodePage As Long) As String
    Dim bufSize As Long
    bufSize = MultiByteToWideChar(CodePage, 0&, UTF8(0), UBound(UTF8) + 1, 0, 0)
    MultiByteToUTF16 = Space(bufSize)
    MultiByteToWideChar CodePage, 0&, UTF8(0), UBound(UTF8) + 1, StrPtr(MultiByteToUTF16), bufSize
End Function

Function UTF16ToMultiByte(UTF16 As String, CodePage As Long) As Byte()
    Dim bufSize As Long
    Dim arr() As Byte
    bufSize = WideCharToMultiByte(CodePage, 0&, StrPtr(UTF16), Len(UTF16), 0, 0, 0, 0)
    ReDim arr(bufSize - 1)
    WideCharToMultiByte CodePage, 0&, StrPtr(UTF16), Len(UTF16), arr(0), bufSize, 0, 0
    UTF16ToMultiByte = arr
End Function

Private Sub Command1_Click()
    MsgBox MultiByteToUTF16(UTF16ToMultiByte("ab中,c", cpUTF8), cpUTF8)
End Sub

--------------------编程问答-------------------- 刚才回复的东西居然没有?  --------------------编程问答-------------------- --------------------编程问答--------------------
引用楼主  的回复:
1.听说strings.asc()可以求汉字的ASCII码。可是又听说ASCII码是8位的,而汉字是16位的。那这个函数求的到底是不是ASCII码?
2.听说汉字的strings.asc()<0,为什么?strings.asc()>0的那些编码都给谁了?从哪可以查?
3.有没有求utf-8码的函数?
4.请推荐一些详解各种编码的书和帖子。

学习~
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,