VB.NET UNICODE码 显示

Python012

VB.NET UNICODE码 显示,第1张

Public Class Form1

    Dim b() As Byte

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        b = System.Text.Encoding.Default.GetBytes(TextBox1.Text)

        For i = 0 To UBound(b)

            TextBox2.AppendText(i.ToString & " ")

        Next

    End Sub

 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        TextBox1.Text = System.Text.Encoding.Default.GetString(b)

    End Sub

 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        TextBox1.Text = "Google free online translation service instantly translates text and web pages。 该翻译器支持: 中文(简体), 中文(繁体), shqip, 日本语, русский, langue française ..."

    End Sub

End ClassVB.Net中用String类型表示字符,内部采用Unicode编码。当需要在网络或串口中收发字符串时,就需要在String和Byte数组之间进行转换,这项功能可以通过System.Text.Encoding类实现。

Private zeroChars() As Char = {ChrW(0)}

Dim descBytes() As Byte = System.Text.Encoding.Unicode.GetBytes(mDescription)

Dim description As String = System.Text.Encoding.Unicode.GetString(rBuffer, offset, length).TrimEnd(zeroChars)

说明:C语言中用'\0'表示字符串结束,而String类型中0是有效字符,显示时是空白字符,会占用显示宽度,可以用TrimEnd方法将字符串末尾的零字符去掉。

主要叙说一下StrConv 函数conversion参数最后两个值的含义和用途,并举例说明。

1、语法

StrConv(string, conversion, LCID)

StrConv 函数的语法有下面的命名参数:

部分 说明

string 必要参数。要转换的字符串表达式。

conversion 必要参数。Integer。其值的和决定转换的类型。

LCID 可选的。如果与系统LocaleID不同,则为LocaleID(系统LocaleID为缺省值。)

设置值

conversion 参数的设置值为:

常数 值 说明

vbUpperCase 1 将字符串文字转成大写。

vbLowerCase 2 将字符串文字转成小写。

vbProperCase 3 将字符串中每个字的开头字母转成大写。

vbWide* 4* 将字符串中单字节字符转成双字节字符。

vbNarrow* 8* 将字符串中双字节字符转成单字节字符。

vbKatakana** 16** 将字符串中平假名字符转成片假名字符。

vbHiragana** 32** 将字符串中片假名字符转成平假名字符。

vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。

vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。

*应用到远东国别。

**仅应用到日本。

说明:前面3个参数比较简单,后面4个我们用不上,就不说了,主要说说后面两个。

2、ANSI 格式

语法中说的缺省码页就是ANSI模式,英文环境下 的ANSI 格式其实也就是ASCII码,其它环境就不一样了,比如中文环境,就是ASCII,一个字节表示一个字符,GB2312,2个字节表示一个汉字,所以中文环境下的ANSI格式就是ASCII码+GB2312,早期的DOS系统中纯文本就是这种格式,这种格式下,通过最高位来判断是中文字符(最高位是1)还是ASCII字符(最高位是0)。中文环境下保存文本文件时一般都采用ANSI格式,不过也有其他格式,比如UTF-8。

3、Unicode编码

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode用两个字节表示一个字符,涵盖了世界上所有字符,和以前的字符集都不兼容,VB内部字符串就是采用Unicode编码,所以当我们打开一个文本文件读入数据的时候,其内存中的内容和文本文件的内容是不一样的,经过了转换,除非你采用二进制方式读入。

4、vbUnicode和vbFromUnicode含义

有了上面叙说,这两个参数的含义就好理解了,就是Unicode编码和ANSI编码的互换,例如:

          textline= StrConv(plaintext,vbUnicode)  

这儿textline是以字符串变量,plaintext是以字节变量保存着ANSI模式的字符内容,例如,“2”这个字符,一个字节,值是50,16进制是32,“皖”这个汉字,两个字节,值是205和238,同样是这两个字符,作为字符串在内存中都是两个字节,例如,“2”这个字符在内存中16进制值是0032。当VB打开一个文件读取文本内容是,实际上自动进行了上述转换。

         plaintext = StrConv(textline, vbFromUnicode)

这儿进行相反的转换,就是将Unicode字符串转换成ANSI模式,转换结果必须以字节方式保存。

5、vbUnicode和vbFromUnicode用途

由于字符在内存中的内容和文件中的内容不一致,所以必须要用到这种转换,特别是系统间进行数据交换、数据加密和解密,如果不做转换可能导致得不到正确的结果。

比如,我们对一个文本文件进行加密,这个文件是ANSI格式存储的,当从文件内容读入一行到内存的时候,自动将内容转换成了Unicode格式,如果这时候对其做加密运算,其结果和文件中字符串加密结果是不一样的,这样的结果如果让别人解密将无法得到正确的结果。如果对读入内存的内容先做个转换(textline是读入内容):

         plaintext = StrConv(textline, vbFromUnicode)

再对plaintext做加密,其结果就一样了。

举例(按行做加密和解密运算,算法是AES+Base64):

[vb] view plain copy

Status = "Encrypting File"

Open FileName For Input As #1      ' 打开输入文件。

Open FileName2 For Output As #2     ' 打开输出文件。

Do While Not EOF(1)

Line Input #1, TextLine

plaintext = StrConv(TextLine, vbFromUnicode)

Status = "Encrypting Data"

m_Rijndael.SetCipherKey pass, KeyBits

m_Rijndael.ArrayEncrypt plaintext, ciphertext, 0

Status = "Converting Text to Base64"

TextLine = Base64Encode(ciphertext)

Status = ""

Print #2, TextLine    ' 将字符串写入文件。

Loop

Close

[vb] view plain copy

Status = "Decrypting File"

Open FileName For Input As #1      ' 打开输入文件。

Open FileName2 For Output As #2    ' 打开输出文件。

Do While Not EOF(1)

Line Input #1, TextLine

Status = "Converting Base64 to Text"

ciphertext = Base64Decode(TextLine)

Status = "Decrypting Data"

m_Rijndael.SetCipherKey pass, KeyBits

If m_Rijndael.ArrayDecrypt(plaintext, ciphertext, 0) <> 0 Then

Status = ""

Exit Sub

End If

TextLine = StrConv(plaintext, vbUnicode)

For i = 0 To UBound(plaintext)

Debug.Print plaintext(i)

Next i

k = InStr(1, TextLine, Chr(0), vbBinaryCompare)

If k > 0 Then TextLine = Left(TextLine, k - 1)    '截掉加密时补的0

MsgBox TextLine & "end"

Status = ""

Print #2, TextLine    ' 将字符串写入文件。

Loop

Close

Visual Basic.NET是基于微软.NET Framework之上的面向对象的中间解释性语言(名片中说VB.NET是"...中间解释性语言“,这种说法极不准确,甚至完全错误。可能原编辑者是指的编译器会先将源码翻译成MSIL(Microsoft Intermediate Language)中间语言这回事,但这和”解释性语言“有很大差别),可以看作是Visual Basic在·Net Framework平台上的升级版本,增强了对面向对象的支持。但由于改动太大,导致VB.net对VB的向后兼容性不好,在业界引起不小的争议。 大多的VB.Net程序员使用Visual Studio .Net作为IDE(integrated development environment).SharpDevelop是另一种可用的开源的IDE。VB.Net需要在.Net Framework平台上才能执行。 VB.NET的主页http://msdn.microsoft.com/vbasic

详情请看百度百科:http://baike.baidu.com/view/459376.htm?from_id=1198656&type=syn&fromtitle=VB.NET&fr=aladdin

你的问题很有问题。。。

第一:vb

vb就是visual

basic,本身就是一种编程语言.

visual

basic

是一种可视化的、面向对象和采用事件驱动方式的结构化高级程序设计语言,可用于开发

windows

环境下的各类应用程序。它简单易学、效率高,且功能强大可以与

windows

专业开发工具sdk相媲美。在visual

basic环境下,利用事件驱动的编程机制、新颖易用的可视化设计工具,使用windows内部的广泛应用程序接口(api)函数,动态链接库(dll)、对象的链接与嵌入(ole)、开放式数据连接(odbc)等技术,可以高效、快速地开发windows环境下功能强大、图形界面丰富的应用软件系统。随着版本的提高,visual

basic的功能也越来越强。5.0版以后,visual

basic

推出了中文版,与前个版本相比,其功能有了很大提升。

第二:vba

vba即visual

basic

for

applications,包含在微软的应用程序中(比如microsoft

office),以及类似wordperfect

office这样第三方的产品里面。vba这样嵌入在各种应用程序中看起来有些矛盾,但是它的功能和vb一样强大。

vba和vb的区别包括如下几个方面:

1.

vb是设计用于创建标准的应用程序,而vba是使已有的应用程序(excel等)自动化

2.

vb具有自己的开发环境,而vba必须寄生于已有的应用程序.

3.

要运行vb开发的应用程序,用户不必安装vb,因为vb开发出的应用程序是可执行文件(*.exe),而vba开发的程序必须依赖于它的父应用程序,例如excel.

第三:vbscript

vbscript的全称是:microsoft

visual

basic

script

editon.(微软公司可视化basic脚本版).

正如其字面所透露的信息,

vbs(vbscript的进一步简写)是基于visual

basic的脚本语言.

我进一步解释一下,

microsoft

visual

basic是微软公司出品的一套可视化编程工具,

语法基于basic.

脚本语言,

就是不编译成二进制文件,

直接由宿主(host)解释源代码并执行,

简单点说就是你写的程序不需要编译成.exe,

而是直接给用户发送.vbs的源程序,

用户就能执行了.

vbscript也是asp的默认语言,还可以用在windows脚本编写(shell

script)和网页编码(html)中。尽管它的语法类似于vb,但是它却是一种完全不同的语言。vbs不使用vb运行库运行,而是由windows脚本宿主(wscript.exe

-

microsoft

windows

based

script

host)解释执行。这两种语言之中的不同点影响asp网站的表现。

第四:vb.net

visual

basic.net

是从

visual

basic

语言演变而来的,是一种为高效地生成类型安全和面向对象的应用程序而设计的语言。visual

basic

允许开发人员开发面向

windows、web

和移动设备的程序。与所有面向

microsoft

.net

framework

的语言一样,使用

visual

basic

编写的程序都具有安全性和语言互操作性方面的优点。vb.net是微软最新平台技术,是.netframeworksdk的一种语言。vb.net和vc#.net在功能上没有区别。编译以后生成的可执行文件被称为assembly,即程序集。vb.net的版本号是visualbasic7.0,它的运行是建立在clr(commonlanguageruntime)和msil(microsoftintermediatelanguage)虚拟器上的。其实,它的机制和java差不多。

vb.net的特点

1.真正成为面向对象以及支持继承性的语言。

2.窗体设计器支持可视化继承,并且包含了许多新的特性,比如自动改变窗体大小、资源本地化支持、数据类工具内在支持xml数据。

3.直接建立在.net的框架结构上,因此开发人员可以充分利用所有.net平台特性,也可以与其他的.net语言交互。

4.为windows应用程序提供了xcopy部署,开发者不再需要为dll的版本问题担忧。