vb.net默认字符编码 vb字形常规代码
gb2312>unicode>utf8, 以及逆转的方法'>VB.net 字符转换问题 字符(汉字、数字、字母、符号)>gb2312>unicode>utf8, 以及逆转的方法
字符编码转换吗?
在澄城等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供做网站、网站制作 网站设计制作定制网站建设,公司网站建设,企业网站建设,品牌网站制作,成都全网营销,外贸营销网站建设,澄城网站建设费用合理。
1.字符与gb2312(gbk的子集):
Public Function GBKEncode(ByVal sInput As String) As String
Dim ret_GBKEncode As String = ""
Dim i As Integer
Dim startIndex As Integer = 0
Dim endIndex As Integer
Dim x() As Byte = System.Text.Encoding.Default.GetBytes(sInput) '字符以及字符串在vb2008中都是以unicode编码存储的
endIndex = x.Length - 1
For i = startIndex To endIndex
ret_GBKEncode = "%" Hex(x(i))
Next
Return ret_GBKEncode
End Function
'GBK解码
Public Function GBKDecode(ByVal sInput As String) As String
sInput = sInput.Replace("%", "")
Dim ret_GBKDecode As String = ""
Dim sLen As Integer = sInput.Length
Dim n As Integer = sLen \ 2
Dim sBytes(0 To n - 1) As Byte
'转化为字节码
For i As Integer = 1 To n
sBytes(i - 1) = CByte("H" sInput.Substring(2 * i - 2, 2))
Next
'将字节码转化为字符串
ret_GBKDecode = System.Text.Encoding.Default.GetString(sBytes)
Return ret_GBKDecode
End Function
2.Unicode字符串为UTF-8
Imports System.Text
Public Function StringAsUtf8Bytes(ByVal strData As String) As Byte()
Dim bytes() As Byte
bytes = Encoding.UTF8.GetBytes(strData)
Return bytes
End Function
'这里可以类推出好几种。
vb.net怎么把汉字转换为GB2312编码,例如“广东”变成%B9%E3%B6%AB
GB2312是GBK编码的子集,使用GBK编码函数即可
'GBK编码(结果以百分号%进行分隔)
Public Function GBKEncode(ByVal sInput As String) As String
Dim ret_GBKEncode As String = ""
Dim i As Integer
Dim startIndex As Integer = 0
Dim endIndex As Integer
Dim x() As Byte = System.Text.Encoding.Default.GetBytes(sInput) '字符以及字符串在vb2008中都是以unicode编码存储的
endIndex = x.Length - 1
For i = startIndex To endIndex
ret_GBKEncode = "%" Hex(x(i))
Next
Return ret_GBKEncode
End Function
'GBK解码
Public Function GBKDecode(ByVal sInput As String) As String
sInput = sInput.Replace("%", "")
Dim ret_GBKDecode As String = ""
Dim sLen As Integer = sInput.Length
Dim n As Integer = sLen \ 2
Dim sBytes(0 To n - 1) As Byte
'转化为字节码
For i As Integer = 1 To n
sBytes(i - 1) = CByte("H" sInput.Substring(2 * i - 2, 2))
Next
'将字节码转化为字符串
ret_GBKDecode = System.Text.Encoding.Default.GetString(sBytes)
Return ret_GBKDecode
End Function
vb.net中textbox中显示本地文本的中文时候总是出现乱码,也就是说显示不了中文
那您现在也不要担心,支原体是一个相对比较重的感染,而且可能夫妻同时感染,老公不挂是否有症状,都建议去医院查下,预防以后夫妻交叉感染,而且支原体治疗后,是需要复查3个月,3个月都是阴性,才算完全的治疗,复查正常后在去医院做个孕前优生检测,在医生指导下受孕,祝您健康
病情分析:
你好,这种情况需要及时的治疗的
指导意见:
支原体感染治好后,患者可在3到6个月以后再考虑怀孕,因为各种各样药物的残留影响有可能导致胎儿出现畸形.这些药物虽然大部分都排出体外了,但是有一部分可以继续存在人体的体内,影响精子以及卵子的形成或者是导致精子卵子的畸形.因此,患者使用这些药物以后,一般应该在3到6个月以后才考虑怀孕.
病情分析:
保险一点的话最好是半年之内,因为我们知道治疗此病的药物副作用是比较大的.
指导意见:
用大环内脂类药物效果好,口服红霉素和阿奇霉素效果就很好,在治疗期间以及治疗的恢复期间是不允许同房,因为有支原体感染的情况下易导致胎儿发育畸形,感染等等情况.
生活护理:
注意休息,祝您早日健康!
不知道你的支原体检查是抽血查的还是查的分泌物?如果查的是分泌物,首先正常女性阴道里就寄生有支原体,这对生育来说影响不大,因为好多生殖中心已经不把支原体检查作为孕前常规检查;其次支原体服完药之后2周再检查比较好,时间太短会出现假阳性.
病情分析:
支原体是正常存在人体内微生物,当在人的抵抗力下降时,其可异常增殖,产生致病作用.
指导意见:
但由于支原体无细胞壁的特殊结构,其处于病毒与细菌之间,用药受限,临床上治疗主要选用的药物有四环素类,大环内酯类,喹诺酮类,其治疗的时间比较长,一般是半个月到一个月左右,但一定不要中断治疗,因为治疗不彻底很可能引起内部感染如盆腔炎,宫颈炎等,建议你支原体检测为阴性后再怀孕.
VB.NET UNICODE码 显示
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
为什么在VB.NET中用My.Computer.FileSystem.ReadAllText(文件名)得到的字符串是乱码?
My.Computer.FileSystem.ReadAllText(strfilename,System.Text.Encoding.Default)
需要加参数,指定文件名编码System.Text.Encoding.Default这里指的是系统默认编码
一个VB.net的菜鸟问题
【1】
New Char()意思是定义一个新的Char型数组并将此数组作为参数传递
基本等同于VB6的Dim tmp() As XXXX
但是此语法要比VB6中的更加灵活
【2】
VB.net中新增了一个Char类型,用来存储Unicode字符,而用引号""括起来的字符默认为ASCII字符,所以要在引号后加上一个小写的c来强制VB将字符转换为Unicode编码。例如:
Dim UniCode As Char,ASCIICode As String
UniCode = "W"c
ASCIICode = "W"
【3】花括号为初始一个新数组时的语法,括号中可以用逗号分隔开数组的初始值。对比:
VB6:
Dim k() As String
k = Array("a","b","c")
VB.net:
Dim k As String(){"a","b","c"}
而数组作为参数传递时,在过程的一开始就定义一个传递用的数组是很麻烦的,
所以用New Char(){ "a"c , "b"c , "c"c }会很方便
【4】
Split方法有很多重载版本,你所说的这一种能够使用
当前文章:vb.net默认字符编码 vb字形常规代码
文章网址:http://azwzsj.com/article/hheoie.html