vb unicode问题 例如utf8 转换 20
vb中遇到unicode字符,文件名中有,文件内容中有,该怎么办,就是说在调试中发现变量获取文件名或文件内容后会自动转换成乱码,至今没有找到函数可以解决问题,百度也提问多...
vb中遇到 unicode 字符,文件名中有 ,文件内容中有,该怎么办,就是说在调试中发现变量获取文件名或文件内容后会自动转换成乱码,至今没有找到函数可以解决问题,百度也提问多次。 最主要是文件名有unicode 字符例如utf8什么,变量得到文件名时就是乱码,文件就找不到了,请问有什么办法解决吗
举例
现在有一个文件,是另存为的网页,文件名和文件内容都包含特殊字符(unicode utf8 自己都弄不懂了)
现在使用 open 语句打开文件,显示文件不存在
经过调试发现,vb会自动将特殊字符转换为乱码 如 ?
有几个文件名的 特殊字符时 空格 将空格删除 或 替换为键盘输入的正常空格 就能打开文件
将文件名复制在 vb 的文本框 也是乱码
就是说变量 函数得到的只是被预先转换过的乱码,至今为止没有任何函数或方法可以解决
假如只是文件内容有特殊字符有时候还勉强可以跳过,文件名就一点办法也没有了。 展开
举例
现在有一个文件,是另存为的网页,文件名和文件内容都包含特殊字符(unicode utf8 自己都弄不懂了)
现在使用 open 语句打开文件,显示文件不存在
经过调试发现,vb会自动将特殊字符转换为乱码 如 ?
有几个文件名的 特殊字符时 空格 将空格删除 或 替换为键盘输入的正常空格 就能打开文件
将文件名复制在 vb 的文本框 也是乱码
就是说变量 函数得到的只是被预先转换过的乱码,至今为止没有任何函数或方法可以解决
假如只是文件内容有特殊字符有时候还勉强可以跳过,文件名就一点办法也没有了。 展开
4个回答
展开全部
可以用 strconv 函数:
百科里的解释:
StrConv StrConv 函数 -------------------------------------------------------------------------------- 返回按指定类型转换的 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 格式的这种数组时,使用赋值语句。 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 -------------------------------------------------------------------------------- 相关基础知识: 命名参数 一参数,在对象库中预先定义了其名称。对每个参数,不必拘泥于语法所规定的特定顺序来提供值,而是只需按任何顺序用命名参数分配值。例如,假设一方法接受了三个参数: DoSomeThing namedarg1, namedarg2, namedarg3 在对命名参数赋值时,可使用以下语句: DoSomeThing namedarg3 := 4, namedarg2 := 5, namedarg1 := 20 注意,命名的参数不必按语法中安排的正规顺序出现。 字符串表达式 任何其值为一连串字符的表达式。字符串表达式的元素可包含返回字符串的函数、字符串文字、字符串常数、字符串变量、字符串 Variant 或返回字符串 Variant (VarType 8) 的函数。 Integer 数据类型 一种数据类型,将整型变量作为 2 字节整数存储起来,范围是 -32,768 到 32,767 之间的数字。Integer 数据类型也可表示列举值。在 Visual Basic 可用百分比符号 (%) 的类型声明字符来表示一个 Integer。 参数 传递给一个过程的常数、变量或表达式。 Unicode 国际标准化组织 (ISO) 字符标准。Unicode 使用 16 位 (2 字节) 编码方案,允许 65,536 个不同的字符空间。Unicode 包含标点符号、数学符号、修饰符号等的表示。 常数 执行程序时保持常数值的命名项目。常数可以是字符串、数值、另一常数、任何( 除乘幂与 Is 之外的) 算术运算符或逻辑运算符的组合。每个主应用程序皆可定义自己的一组常数。用户也可以 Const 语句定义附加常数。可在代码中的任何地方使用常数代替实际的值。 区域 关于国家/地区及其语言的信息集合。代码区域设置会影响关键字等术语的语言,也会定义区域专用设置,像小数点、日期格式、字符排序顺序等。 系统的区域设置会影响到判别区域的功能,例如,在显示数字或将字符串转换成日期时,可使用操作系统“控制面板”的实用程序来设置系统所在区域。 虽然代码区域和系统区域通常设置为相同的设置值,但在一些情况仍有不同之处。例如,在标准版 Visual Basic 和专业版 Visual Basic 中,并没有把代码从 English-U.S. 翻译过来。可以把系统区域设置成用户的语言和国家/地区,但总是将代码区域设置成 English-U.S.,而且不能改变。在这种情况下,将使用 English-U.S. 分隔符、格式占位符和排序次序。 运行时错误 在代码正在运行的时发生的错误。当一语句要进行非法操作时就会发生运行时错误。 Null 一个值,指示变量不含有效数据。 Null 是将 Null 显式赋值给一变量的结果,或者是包含 Null 的表达式之间的任何运算。 DBCS 使用 1 或 2 字节来表示一字符的字符集,超过个 256 字符也可表示。
百科里的解释:
StrConv StrConv 函数 -------------------------------------------------------------------------------- 返回按指定类型转换的 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 格式的这种数组时,使用赋值语句。 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 -------------------------------------------------------------------------------- 相关基础知识: 命名参数 一参数,在对象库中预先定义了其名称。对每个参数,不必拘泥于语法所规定的特定顺序来提供值,而是只需按任何顺序用命名参数分配值。例如,假设一方法接受了三个参数: DoSomeThing namedarg1, namedarg2, namedarg3 在对命名参数赋值时,可使用以下语句: DoSomeThing namedarg3 := 4, namedarg2 := 5, namedarg1 := 20 注意,命名的参数不必按语法中安排的正规顺序出现。 字符串表达式 任何其值为一连串字符的表达式。字符串表达式的元素可包含返回字符串的函数、字符串文字、字符串常数、字符串变量、字符串 Variant 或返回字符串 Variant (VarType 8) 的函数。 Integer 数据类型 一种数据类型,将整型变量作为 2 字节整数存储起来,范围是 -32,768 到 32,767 之间的数字。Integer 数据类型也可表示列举值。在 Visual Basic 可用百分比符号 (%) 的类型声明字符来表示一个 Integer。 参数 传递给一个过程的常数、变量或表达式。 Unicode 国际标准化组织 (ISO) 字符标准。Unicode 使用 16 位 (2 字节) 编码方案,允许 65,536 个不同的字符空间。Unicode 包含标点符号、数学符号、修饰符号等的表示。 常数 执行程序时保持常数值的命名项目。常数可以是字符串、数值、另一常数、任何( 除乘幂与 Is 之外的) 算术运算符或逻辑运算符的组合。每个主应用程序皆可定义自己的一组常数。用户也可以 Const 语句定义附加常数。可在代码中的任何地方使用常数代替实际的值。 区域 关于国家/地区及其语言的信息集合。代码区域设置会影响关键字等术语的语言,也会定义区域专用设置,像小数点、日期格式、字符排序顺序等。 系统的区域设置会影响到判别区域的功能,例如,在显示数字或将字符串转换成日期时,可使用操作系统“控制面板”的实用程序来设置系统所在区域。 虽然代码区域和系统区域通常设置为相同的设置值,但在一些情况仍有不同之处。例如,在标准版 Visual Basic 和专业版 Visual Basic 中,并没有把代码从 English-U.S. 翻译过来。可以把系统区域设置成用户的语言和国家/地区,但总是将代码区域设置成 English-U.S.,而且不能改变。在这种情况下,将使用 English-U.S. 分隔符、格式占位符和排序次序。 运行时错误 在代码正在运行的时发生的错误。当一语句要进行非法操作时就会发生运行时错误。 Null 一个值,指示变量不含有效数据。 Null 是将 Null 显式赋值给一变量的结果,或者是包含 Null 的表达式之间的任何运算。 DBCS 使用 1 或 2 字节来表示一字符的字符集,超过个 256 字符也可表示。
展开全部
这个问题应该是读取的方法有误,将读取时候的编码指定成UTF-8
比如:
StreamReader sr = new StreamReader("例子.txt", Encoding.UTF8);
(我的是C#语法)
比如:
StreamReader sr = new StreamReader("例子.txt", Encoding.UTF8);
(我的是C#语法)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我这个回答可能会让LZ失望。。。。据我知道,如果你用的英语或者中文windows系统,VB6对Unicode的支持是很不好的,比如你的文件名含有欧洲语言的特殊字母或者比如阿拉伯语之类的字符,或者你的文件中含有这些字母,读出来的就是乱码。
如果是读文件,Unicode编码的文件可以用binary的方法open,但是文件的开头会有个小乱码,不过也分是endian和big endian的类型,很复杂。
如果是处理多语言或者Unicode的字符,建议楼主还是换程序语言吧。。。比如上标的TM符号,vb6是完全处理不了的。
如果是读文件,Unicode编码的文件可以用binary的方法open,但是文件的开头会有个小乱码,不过也分是endian和big endian的类型,很复杂。
如果是处理多语言或者Unicode的字符,建议楼主还是换程序语言吧。。。比如上标的TM符号,vb6是完全处理不了的。
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请具体举一个例子来说明。
单凭上述内容不好回答。
单凭上述内容不好回答。
来自:求助得到的回答
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询