VB中StrConv(Text1.Text, vbFromUnicode)是啥意思啊?请高手指点,谢谢!

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VB中StrConv(Text1.Text, vbFromUnicode)是啥意思啊?请高手指点,谢谢!相关的知识,希望对你有一定的参考价值。

参考技术A 类型转换 参考技术B 返回按指定类型转换的 Variant (String)。
语法
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 转成系统的缺省码页。
*应用到远东国别。**仅应用到日本。
注意 这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。
下面是一些一般情况下的有效分界符:Null (Chr$(0)),水平制表符 (Chr$(9)),换行 (Chr$(10)),垂直制表符 (Chr$(11)),换页 (Chr$(12)) ,回车 (Chr$(13)),空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。
说明
在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。

常数 值 说明
vbUpperCase 1 将字符串文字转成大写。
s = StrConv("AbCdef", 1) 's = "ABCDEF"
vbLowerCase 2 将字符串文字转成小写。
s = StrConv("AbCdef", 2) 's = "abcdef"
vbProperCase 3 将字符串中每个字的开头字母转成大写。
s = StrConv("ni hao", 3) 's = "Ni Hao"
每个字的开头 = 前面有空格,与是不是单词无关
s = StrConv("nihao", 3) 's = "Nihao"
vbWide* 4* 将字符串中单字节字符转成双字节字符。
s = StrConv("Ab123你好", 4) 's = "Ab123你好"
(瘦子变胖子,对中文无效)
vbNarrow* 8* 将字符串中双字节字符转成单字节字符。
s = StrConv("Ab123你好", 8) 's = "Ab123你好"
(胖子变减肥,对中文无效)
vbKatakana** 16** 将字符串中平假名字符转成片假名字符。
小鬼子用的
vbHiragana** 32** 将字符串中片假名字符转成平假名字符。
小鬼子用的
vbUnicode 64 根据系统的缺省码页将字符串转成 Unicode。
对概念不太明白,暂时这样理解:
Unicode = 在内存里的表现方式(2进制?
而系统的缺省码页 = 我们所看到的
s = StrConv("你好", 64) 's = "`OY"
vbFromUnicode 128 将字符串由 Unicode 转成系统的缺省码页。
应用案例:处理二进制数组与字符串比较时用
s = StrConv("`OY", 128) 's = "你好"
对于 64、128 的理解不一定正确,但在处理程序间的数据交换时是很有用的,比如用 open 语句打开文本文件。说的比较笼统,只有在接触后才容易体会。
备注:“*”应用到远东国别,“**”仅应用到日本。
注意:
这些常数是由 VBA 指定的。可以在程序中使用它们来替换真正的值。
其中大部分是可以组合的,例如 vbUpperCase + vbWide,互斥的常数不能组合,例如 vbUnicode + vbFromUnicode。
当在不适用的国别使用常数 vbWide、vbNarrow、vbKatakana,和 vbHiragana 时,就会导致运行时错误。
下面是一些一般情况下的有效分界符:
Null (Chr$(0))
水平制表符 (Chr$(9))
换行 (Chr$(10))
垂直制表符 (Chr$(11))
换页 (Chr$(12))
回车 (Chr$(13))
空白 (SBCS) (Chr$(32))。在 DBCS中,空白的实际值会随国家/地区而不同。
说明:
在把 ANSI 格式的 Byte 数组转换为字符串时,您应该使用 StrConv 函数。当您转换 Unicode 格式的这种数组时,使用赋值语句。
StrConv 函数示例:
本示例使用 StrConv 函数来将 Unicode 字符串转换成 ANSI 字符串。
Dim i As Long
Dim x() As Byte
x = StrConv("ABCDEFG", vbFromUnicode) ' 转换字符串。
For i = 0 To UBound(x)
Debug.Print x(i)
Next本回答被提问者和网友采纳

vb 判断汉字

Asc小于零不一定是汉字 还有可能是全角字符
我写的这个
Private Sub CharAccount_Click()
Dim Sum&
Sum = 0
For c = 1 To Len(Text1.Text)
Char = Mid(Text1.Text, c, 1)
If AscW(Char) < 40870 And AscW(Char) > 19967 Then
Sum = Sum + 1
End If
Next c
MsgBox "汉字总数为" & Sum, vbOKOnly, "提示"
End Sub

这个也不能准确判断 为什么啊
有什么方法能够准确判断是汉字呢
不要太复杂的回答 。。我新手 谢谢各位大神了

Function isLetter(letter As String) As String
If Asc(letter) < 0 Then
  ’Ascii码小于0的为汉字区,但其中有的是全角字符而不完全是汉字,需要进一步区分
gbascii = AscB(StrConv(letter, vbFromUnicode))
'MsgBox gbascii
'区位码在16区之后的为汉字[16区以前的 是全角字符]
If gbascii - 160 > 15 Then
isLetter = "是汉字"
Else
isLetter = "是全角符号"
End If
Else
isLetter = "是半角英文或数字"
End If
End Function
.................张志晨:我想这个比较简单,符合你的意愿。
参考技术A 1、方法1

VB6中提供了LenB函数用于字符串中的字节数据。如同在双字节字符集语言中一样,LenB返回的是用于代表字符串的字节数,而不是返回字符串中字符的数量。如为用户自定义类型,LenB返回在内存中的大小。

LenB)

对要处理的字符串Str1,必须先使用StrConv函数把ANSI格式的Byte数组转换为字符串,否则直接使用LenB函数得到的结果比实际结果大。

2、方法2

这里自定义了一个子函数CLen来计算汉字字符串的实际长度。同时还能判定字符串中汉字的实际个数。

Function CLen as Integer

Static HzNum as Integer

L = len

For n=1 to L

If Asc)<0 Then HzNum = HzNum + 1

Next n

Clen = L + HzNum

End Function

CLen函数中的静态变量HzNum返回字符串中实际汉字的数目。
参考技术B Private Sub Command1_Click()
Dim Sum&
Sum = 0
For c = 1 To Len(Text1.Text)
Char = Mid(Text1.Text, c, 1)
If (AscW(Char) > -40870 And AscW(Char) < -19967) Or (AscW(Char) < 40870 And AscW(Char) > 19967) Then
Sum = Sum + 1
End If
Next c
MsgBox "汉字总数为" & Sum, vbOKOnly, "提示"
End Sub
'因为汉字ascw可能大于0追问

厉害! ascw返回integer型 0-32767 汉字不够用 才会有负的~~

本回答被提问者采纳
参考技术C 判断单个字符是否为汉字的函数。
字符串是否包含汉字,请您自行据此处理吧,您反正会循环Mid。

Public Function ChineseBol(Str1 As String) As Boolean
'判断Str1是否为汉字
'假定Str1只为一个汉字,多个汉字请据此处理

LChinese = CLng("&H4E00") '汉字最小值
UChinese = CLng("&H9FA5") '汉字最大值

If AscW(Str1) >= LChinese And AscW(Str1) <= UChinese Then
ChineseBol = True
Else
ChineseBol = False
End If

End Function
参考技术D Function CountChinese(Byval txtStr as String)
dim i as long
dim alls as long
for i=1 to len(txtStr)
if asc(mid(txtStr,i,1))<0 then
alls=alls+1
end if
next i
CountChinese=alls
End Function

[我这个函数就可以进行字符串中汉字个数的统计]

以上是关于VB中StrConv(Text1.Text, vbFromUnicode)是啥意思啊?请高手指点,谢谢!的主要内容,如果未能解决你的问题,请参考以下文章

vb怎么把结果输出到文本框里?

vb计算器代码

vb中使用“Clipboard.SetText Text1.Text”复制的内容,怎么粘贴在记事本不起作用????

VB 加减乘除

vb 判断汉字

vb TextBox 换行