VB中的Unicode 和 Ansi 格式 转换
VB中的Unicode 和 Ansi 格式
Visual Basic 32-bit 版本的字串处理采用 Unicode,也就是说字串在 VB 内部是以Unicode 的格式来存放。何谓 Unicode?简单的说,就是每一个字符都是以 2-byte 的形式表示,而每个「实体字符」就是一个「字符」。因此,
Len("大家好")
Len("abc")
所返回的值都是 3,因为「大」和「a」都是一个字符。
但是这对一些中文字串处理,例如纯文字的数据文件,却是一个大灾难,因为你必须以byte 来定位每个字符,可是 Unicode 却把一切的处理全搞砸了。例如:
Len("Good Morning") 返回 12,而
Len("今天天气很好") 返回 6
对初学者而言,好不容易能使用 VB 来写程序已经是件了不起的事了,却马上在中文处理上挨了一记闷棍,所受到的打击实在不小。但是不要怕,事实上只要再多了解一些指令,就可以把中文处理的问题解决了。
是什么指令呢?最重要的莫过于 StrConv 了。StrConv 函数的语法为:StrConv(待转换字串, 转换格式)
其中转换格式在这里用到的是:
vbUnicode 将 Ansi 字串转换为 Unicode
vbfromUnicode 将 Unicode 字串转换为 Ansi
将字串转成 Ansi 之后,所有的字串处理指令都要加个 B,例如:LeftB, RightB,
MidB, ChrB, InstrB, LenB, InputB 等。例用这些指令来处理就行了。
当你处理完毕之后,你可以再将它再转回 Unicode,这样就可以使用一般的字串处理指令了。这样讲看得懂吗?如果还是不了解,看看下面的实例说明:
简易使用范例
看看下面的基本范例您应该就会对 VB 的字串处理方式有些概念。
Private Sub Command1_Click ()
Dim sUnicode As String
Dim sAnsi As String
' Unicode 运算
sUnicode = "王小明,A123456789,651023,上海市中山路100号,(02)2345678"
Debug.Print Len(sUnicode) ' 返回 44
Debug.Print Mid$(sUnicode, 5, 10) ' 返回 A123456789
Debug.Print Instr(sUnicode, "上海市") ' 返回 23
' 将 Unicode 字串转成 Ansi
sAnsi = StrConv(sUnicode, vbfromUnicode)
' Ansi 运算
Debug.Print LenB(sAnsi) ' 返回 54
Debug.Print MidB$(sAnsi, 8, 10) ' 返回 ?????,因为忘了转回 Unicode
Debug
相关文档:
Option Explicit
Private rsMain As ADODB.Recordset
Private rsTerm As ADODB.Recordset
Private strSql As String
Private Sub cmdAbout_Click()
frmAbout.Show
End Sub
Private Sub cmdAddObject_Click() '程序段
......
在很多 VB 的资料库书籍中,都会很完整的提到:如何由其他种类的文件中将资料导入资料库,但是却很少有书提到:如何将资料库中的资料,导出到各种不同的文件类型的文件中,连 VB 的 Help 中也是这样!
或许是大家都认为资料库主题的重点是在资料库本身吧!
但是,在实际的资料库程序运用中,却常常需要将资料库导出到各种 ......
Private Declare Function ExitWindowsEx Lib "user32" (ByVal uFlags As Long, ByVal dwReserved As Long) As Long
Private Const EWX_LOGOFF = 0
Private Const EWX_SHUTDOWN = 1
Private Const EWX_REBOOT = 2
Private Const EWX_FORCE = 4
Private closeTime As String
Sub AdjustTokenPrivilegesForNT()
......
http://www.carlosag.net/Tools/CodeTranslator/ 这个也许学计算机的哥哥姐姐们会用得到,,就转了希望多多支持哦 西西 用得到就顶哦
差点忘了哦 ,藕还有一个sql的插件很好用的呀。。。。有想要的就留言下要咯。。。。。 ......
Private Declare Function InternetSetCookie Lib "wininet.dll" Alias "InternetSetCookieA" (ByVal lpszUrlName As String, ByVal lpszCookieName As String, ByVal lpszCookieData As String) As Boolean
Private Declare Function InternetGetCookie Lib "wininet.dll" Alias "InternetGetCookieA" (ByVal lpszUrlName ......