在中文 Windoow 下,如何用 VB 输出扩展 ASCII 字符? 在中文 Windows 下比如输出到文本文件,用 Chr(205) 出来的是0x00,用 ChrW(205) 出来的是 0x3F,即"?",这应该是系统作了处理吧?ChrW() 在英文 Windows 系统下的功能是正常的。请问如何处理才能避开 OS 本身的处理,兼容各种不同语言版本的 Windows 呢?谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 用ChrW()出来的是Unicode,而VB中的String是Unicode 可以用StrConv(string, vbUnicode)StrConv(string, vbFromUnicode)进行相互装换 Unicode 只是内部的运算过程吧,我记得最后输出还是要转 ANSI 的。问题是,输出的既不是正确的 ASCII 编码,也不是正确的 Unicode 编码呀! 编码是不会错的,OS也不可能干涉VB程序的运行;至于不同的系统显示不同,是另外一回事情~ 这么说吧,我要生成的字符串如 str1,在英文系统下可以正确的生成,但是在中文系统下就成了 str2 这样,那两个问号不是因为字库中没有相应字符而变成 ?,输出的字符就是 0x3F 了。str1 ÌABÇ,BXÈCD~Î str2 ìAB?,BXèCD~? StrConv(string, vbUnicode)StrConv(string, vbFromUnicode) ASCII 标准是7位的,也就是只0-127是统一定义的,128-255为扩展ASCII,为不同语系的字符集保留,也就是说不同语言操作系统中,其定义也不同。也并不是都可显示!同为英语国家,美国的定义与英国的就不一样。在中、日、韩等国的象形文字符号语系中对于9X内核,采用双字符(DBCS)方案,扩展ASCII总是与其后第二个字节合并为一个字符;而对于NT内核,统一采用了Unicode方案,单独一个扩展ASCII也没意义。 使用Binary格式么,爱怎么写怎么写 我试试全部转为 Binary 输出吧,谢谢! DBCS 字符串操作函数虽然双字节字符由一个前导字节和一个后续字节组成,并存储在两个连续的字节里,但是在任何涉及到字符和字符串的操作时,它应作为一个单元处理。一些字符串操作函数可以处理基于字符的所有字符串,包括 DBCS 字符。这些函数有 ANSI/DBCS 版本、二进制版本或者 Unicode 版本,如下表所示。根据操作字符串的目的,使用适当的函数。下表中函数的“下”版本尤其适合于使用二进制数据的字符串,“W”版本适合于使用 Unicode 的字符串。函数 描述 Asc 返回字符串第一个字符的 ANSI 或 DBCS 字符代码。 AscB 返回给定包含二进制数据的字符串第一个字节的值。 AscW 返回字符串第一个字符的 Unicode 字符代码。 Chr 返回包含指定 ANSI 或 DBCS 字符代码的字符串。 ChrB 返回包含指定字节的二进制字符串。 ChrW 返回包含指定 Unicode 字符代码的字符串。 Input 从文件中返回指定数目的 ANSI 或 DBCS 字符。 InputB 从文件中返回指定数目的字节。 InStr 返回一字符串在另一字符串中第一次出现的位置。 InStrB 返回一字节在另一二进制字符串中第一次出现的位置。 Left, Right 返回字符串左边或右边指定数目的字符。 LeftB, RightB 返回二进制字符串左边或右边指定数目的字节。 Len 返回以字符数为单位的字符串长度。 LenB 返回以字节数为单位的字符串长度。 Mid 从字符串中返回指定数目的字符。 MidB 从二进制字符串中返回指定数目的字节。 表中没有 "B" 或 "W" 的函数能正确处理 DBCS 或 ANSI 字符。除上述函数以外,String 函数也能处理 DBCS 字符。这就是说所有函数把 DBCS 字符作为一个字符处理,即使该字符由两个字节组成。当处理 SBCS 和 DBCS 字符时,这些函数的过程是不同的。例如,在 Visual Basic 中使用 Mid 函数从字符串中返回指定数目的字符。在使用 DBCS 的区域中,字符数和字节数不一定相同,Mid 函数只返回字符数而不是字节数。大多数情况下,由于这些函数能够正确处理 ANSI、DBCS 和 Unicode 字符串,因此处理字符串数据时,都使用基于字符的函数。基于字节的字符串操作函数,例如 LenB 和 LeftB 用于处理二进制数据的字符串数据。当向 String 变量存储字符或从 String 变量读取字符时,Visual Basic 会自动完成 Unicode 和 ANSI 字符间的转换。当处理二进制数据时,应使用 Byte 数组而不是 String 变量和基于字节的字符串操作函数。详细信息 关于相应的函数,请参阅《语言参考》。处理二进制数据的字符串时,使用下列代码将字符串中的字符映射到 Byte 数组中:Dim MyByteString() As Byte'将字符串映射到一 Byte 数组中。MyByteString = "ABC"'显示二进制数据。For i = LBound(MyByteString) to UBound(MyByteString) Print Right(" " + Hex(MyByteString(i)),2) + " ,";NextPrintDBCS 字符串转换Visual Basic 提供了一些对 DBCS 字符进行字符串转换的函数:StrConv、UCase 和 LCase。StrConv 函数StrConv 函数的全局选项是将大写转换成小写或将小写转换成大写。此外,该函数还有一些 DBCS 特定的选项。例如,通过指定该函数第二个参数中的 vbWide,可将半角字符转换成全角字符。也可用此函数将一种字符类型转换成另一种字符类型,如日语中的平假名转换成片假名。如果与系统的 LocaleID 不同,StrConv 允许您为该字符串指定一个 LocaleID。也可使用 StrConv 函数将 Unicode 字符转换成 ANSI/DBCS 字符或将 ANSI/DBCS 字符转换成 Unicode 字符。通常,Visual Basic 中的字符串由 Unicode 字符组成。当需要处理 ANSI/DBCS 字符串时(例如,在将字符串写入文件之前,计算字符串的字节数),可使用 StrConv 函数的这一功能。全角字符的大小写转换可使用 StrConv 函数的 vbUpperCase 或 vbLowerCase 选项,或者使用 UCase 或 LCase 函数进行字母的大小写转换。使用这些函数完成 DBCS 包括 ANSI 字符的英语全角字符的大小写转换。 嗯,我有点明白了,这个问题还有点麻烦,我需要的输出结果中有些字符必须是 ASCII 码在 128~255 之间的中文系统不能显示的拉丁字符。是不是要在运算过程中先转成 Hex 再输出,而不是得到 ChrW(205) 这样的字符后再转为 Hex,这时可能已经被系统给替换成问号了。这样好多函数全部要重写过了,晕! Dim b() As Byte如果s是ascii串b = s否则b = StrConv(s, vbFromUnicode)put #1,,b 谢谢楼上的,我又看了一下资料,StrConv() 原来有个参数是 LCID,使用 LCID = 1033 就搞定了,用2052是不行的,多谢! 系统托盘响应事件 急啊,一串包含单引号的字符串怎么保存到数据库表中?如 strP="M'LIKE" 问各位大大一个超级菜的问题,一定要帮忙啊!! 高分求助 关于TEXT录入问题 请问,VB的异常处理如何实现 可不可以用ADSL MODE来联接二台计算机? 在csdn上有很多关于调用路径选择对话框的代码,却没有调用带“新建文件夹”按钮的路径选择对话框,他是不是第三方的东东?到哪里找? 比较菜的问题,但我有难度!! 用VB怎么取得当前IE正在浏览的网址?送50分 缺少语句? 喜欢VB的朋友,欢迎加入。因为不懂,我们才有进步。
StrConv(string, vbUnicode)
StrConv(string, vbFromUnicode)
进行相互装换
至于不同的系统显示不同,是另外一回事情~
str1 ÌABÇ,BXÈCD~Î
str2 ìAB?,BXèCD~?
StrConv(string, vbFromUnicode)
对于9X内核,采用双字符(DBCS)方案,扩展ASCII总是与其后第二个字节合并为一个字符;而对于NT内核,统一采用了Unicode方案,单独一个扩展ASCII也没意义。
虽然双字节字符由一个前导字节和一个后续字节组成,并存储在两个连续的字节里,但是在任何涉及到字符和字符串的操作时,它应作为一个单元处理。一些字符串操作函数可以处理基于字符的所有字符串,包括 DBCS 字符。这些函数有 ANSI/DBCS 版本、二进制版本或者 Unicode 版本,如下表所示。根据操作字符串的目的,使用适当的函数。下表中函数的“下”版本尤其适合于使用二进制数据的字符串,“W”版本适合于使用 Unicode 的字符串。函数 描述
Asc 返回字符串第一个字符的 ANSI 或 DBCS 字符代码。
AscB 返回给定包含二进制数据的字符串第一个字节的值。
AscW 返回字符串第一个字符的 Unicode 字符代码。
Chr 返回包含指定 ANSI 或 DBCS 字符代码的字符串。
ChrB 返回包含指定字节的二进制字符串。
ChrW 返回包含指定 Unicode 字符代码的字符串。
Input 从文件中返回指定数目的 ANSI 或 DBCS 字符。
InputB 从文件中返回指定数目的字节。
InStr 返回一字符串在另一字符串中第一次出现的位置。
InStrB 返回一字节在另一二进制字符串中第一次出现的位置。
Left, Right 返回字符串左边或右边指定数目的字符。
LeftB, RightB 返回二进制字符串左边或右边指定数目的字节。
Len 返回以字符数为单位的字符串长度。
LenB 返回以字节数为单位的字符串长度。
Mid 从字符串中返回指定数目的字符。
MidB 从二进制字符串中返回指定数目的字节。
表中没有 "B" 或 "W" 的函数能正确处理 DBCS 或 ANSI 字符。除上述函数以外,String 函数也能处理 DBCS 字符。这就是说所有函数把 DBCS 字符作为一个字符处理,即使该字符由两个字节组成。当处理 SBCS 和 DBCS 字符时,这些函数的过程是不同的。例如,在 Visual Basic 中使用 Mid 函数从字符串中返回指定数目的字符。在使用 DBCS 的区域中,字符数和字节数不一定相同,Mid 函数只返回字符数而不是字节数。大多数情况下,由于这些函数能够正确处理 ANSI、DBCS 和 Unicode 字符串,因此处理字符串数据时,都使用基于字符的函数。基于字节的字符串操作函数,例如 LenB 和 LeftB 用于处理二进制数据的字符串数据。当向 String 变量存储字符或从 String 变量读取字符时,Visual Basic 会自动完成 Unicode 和 ANSI 字符间的转换。当处理二进制数据时,应使用 Byte 数组而不是 String 变量和基于字节的字符串操作函数。详细信息 关于相应的函数,请参阅《语言参考》。处理二进制数据的字符串时,使用下列代码将字符串中的字符映射到 Byte 数组中:Dim MyByteString() As Byte
'将字符串映射到一 Byte 数组中。
MyByteString = "ABC"
'显示二进制数据。
For i = LBound(MyByteString) to UBound(MyByteString)
Print Right(" " + Hex(MyByteString(i)),2) + " ,";
Next
PrintDBCS 字符串转换
Visual Basic 提供了一些对 DBCS 字符进行字符串转换的函数:StrConv、UCase 和 LCase。StrConv 函数
StrConv 函数的全局选项是将大写转换成小写或将小写转换成大写。此外,该函数还有一些 DBCS 特定的选项。例如,通过指定该函数第二个参数中的 vbWide,可将半角字符转换成全角字符。也可用此函数将一种字符类型转换成另一种字符类型,如日语中的平假名转换成片假名。如果与系统的 LocaleID 不同,StrConv 允许您为该字符串指定一个 LocaleID。也可使用 StrConv 函数将 Unicode 字符转换成 ANSI/DBCS 字符或将 ANSI/DBCS 字符转换成 Unicode 字符。通常,Visual Basic 中的字符串由 Unicode 字符组成。当需要处理 ANSI/DBCS 字符串时(例如,在将字符串写入文件之前,计算字符串的字节数),可使用 StrConv 函数的这一功能。全角字符的大小写转换
可使用 StrConv 函数的 vbUpperCase 或 vbLowerCase 选项,或者使用 UCase 或 LCase 函数进行字母的大小写转换。使用这些函数完成 DBCS 包括 ANSI 字符的英语全角字符的大小写转换。
如果s是ascii串
b = s
否则
b = StrConv(s, vbFromUnicode)
put #1,,b