如何将utf8编码转换成ansi编码?

时间:2022-06-08 14:11:46
大家好!
我现在正在做两个文本文件之间的转换,也就是文本文件的读写操作,我用顺序文件读写的方法,利用print写,但是写出来的文件是不是默认的是UTF8编码格式呢?如果是的话,如何转换为ANSI格式呢?
而且,请大家指教一下:ANSI和UTF8编码格式有什么区别吗?ANSI和ASCII有什么区别呢?各自代表什么含义呢?我现在不明白!所以请大家帮忙!
十分感谢!

2 个解决方案

#1


相关资料:

ANSI
美国国家标准委员会 (American National Standards Institute) 的缩写,它负责制定各种编程语言和系统的标准。
ANSI 是个人计算机使用得最普遍的字符集。由于 ANSI 标准使用单一字节表示每个字符,因此最多只能有 256 个字符和标点符号代码。虽然对英语来说已经足够了,但不能完全支持其它语言。

DBCS
发行在亚洲大部分地区的 Microsoft Windows 系统使用 DBCS。它支持很多不同的东亚语言字母,如汉语、日语和朝鲜语。DBCS 使用数字 0–128 表示 ASCII 字符集。其它大于 128 的数字作为前导字节字符,它并不是真正的字符,只是简单的表明下一个字符属于非拉丁字符集。在 DBCS 中,ASCII 字符的长度是一个字节,而日语、朝鲜语和其它东亚字符的长度是 2 个字节。

Unicode
Unicode 是用两个字节表示每个字符的字符编码方案。国际标准组织 (ISO) 几乎为每种语言的每个字符和符号在 0 到 65,535 (216 – 1) 范围内定义了一个数字(再加上为将来发展保留的一些空余空间)。在所有 32 位版本的 Windows 中,部件对象模型 (COM) 都使用 Unicode,它是 OLE 和 ActiveX 技术的基础。Windows NT 全部支持 Unicode。虽然 Unicode 和 DBCS 都是双字节字符,但它们的编码方案完全不同。

双字节字符集 (DBCS) 的特殊问题


建立双字节字符集 (DBCS) 是用来处理使用象形文字字符的东亚语言,它需要使用的字符超过 ANSI 支持的 256 。DBCS 中字符是双字节、16 位符号。虽然为东亚语言定义的字符很少,但 16 位符号可代表 65,536 个字符。例如,现在定义的日语字符集大约有 12,000 个字符。

在使用 DBCS 的区域包括中国、日本、和朝鲜,字符集里都包含单字节和双字节字符。对每个国家/地区,使用的单字节字符都符合 8 位符号标准,并且与 ASCII 字符集相一致。在单字节字符集 (SBCS) 里,有些代码的范围在 DBCS 字符里称为前导字节。由一前导字符和一后续字符组成的一对连续字符代表一双字节字符。使用前导字符的代码范围根据区域而定。

注意   DBCS 是有别于 Unicode 的另一类字符。由于 Visual Basic 内部表示所有字符的格式是 Unicode,所以需要时,ANSI 和 DBCS 字符会自动转换成 Unicode 字符或者 Unicode 字符自动转换成 ANSI 或 DBCS 字符。也可人工完成 Unicode 和 ANSI/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
Print

DBCS 字符串转换
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 函数的这一功能。

#2


学习了!
但是还是没有说明utf8与ansi之间如何转换。请大家继续帮忙!

#1


相关资料:

ANSI
美国国家标准委员会 (American National Standards Institute) 的缩写,它负责制定各种编程语言和系统的标准。
ANSI 是个人计算机使用得最普遍的字符集。由于 ANSI 标准使用单一字节表示每个字符,因此最多只能有 256 个字符和标点符号代码。虽然对英语来说已经足够了,但不能完全支持其它语言。

DBCS
发行在亚洲大部分地区的 Microsoft Windows 系统使用 DBCS。它支持很多不同的东亚语言字母,如汉语、日语和朝鲜语。DBCS 使用数字 0–128 表示 ASCII 字符集。其它大于 128 的数字作为前导字节字符,它并不是真正的字符,只是简单的表明下一个字符属于非拉丁字符集。在 DBCS 中,ASCII 字符的长度是一个字节,而日语、朝鲜语和其它东亚字符的长度是 2 个字节。

Unicode
Unicode 是用两个字节表示每个字符的字符编码方案。国际标准组织 (ISO) 几乎为每种语言的每个字符和符号在 0 到 65,535 (216 – 1) 范围内定义了一个数字(再加上为将来发展保留的一些空余空间)。在所有 32 位版本的 Windows 中,部件对象模型 (COM) 都使用 Unicode,它是 OLE 和 ActiveX 技术的基础。Windows NT 全部支持 Unicode。虽然 Unicode 和 DBCS 都是双字节字符,但它们的编码方案完全不同。

双字节字符集 (DBCS) 的特殊问题


建立双字节字符集 (DBCS) 是用来处理使用象形文字字符的东亚语言,它需要使用的字符超过 ANSI 支持的 256 。DBCS 中字符是双字节、16 位符号。虽然为东亚语言定义的字符很少,但 16 位符号可代表 65,536 个字符。例如,现在定义的日语字符集大约有 12,000 个字符。

在使用 DBCS 的区域包括中国、日本、和朝鲜,字符集里都包含单字节和双字节字符。对每个国家/地区,使用的单字节字符都符合 8 位符号标准,并且与 ASCII 字符集相一致。在单字节字符集 (SBCS) 里,有些代码的范围在 DBCS 字符里称为前导字节。由一前导字符和一后续字符组成的一对连续字符代表一双字节字符。使用前导字符的代码范围根据区域而定。

注意   DBCS 是有别于 Unicode 的另一类字符。由于 Visual Basic 内部表示所有字符的格式是 Unicode,所以需要时,ANSI 和 DBCS 字符会自动转换成 Unicode 字符或者 Unicode 字符自动转换成 ANSI 或 DBCS 字符。也可人工完成 Unicode 和 ANSI/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
Print

DBCS 字符串转换
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 函数的这一功能。

#2


学习了!
但是还是没有说明utf8与ansi之间如何转换。请大家继续帮忙!