想用VBscript 实现UTF8中文转换为Unicode hex编码
预期:
input='ABC123中文'
转换后,变为
output=\u0041\u0042\u0043\u0031\u0032\u0033\u4e2d\u6587
部分代码如下:
Function ToUnicodeChar(Char)
dim uchar
uchar = Hex(AscW(Char))
ToUnicodeChar = "\u" & String(4 - Len(uchar), "0") & uchar
End Function
input='ABC123中文'
output=''
response.write "Length: " & Len(input) & "
"
response.write "Unicode Name: " & input & "
"
For i=1 To Len(input)
output=output & ToUnicodeChar(Mid(input,i,1))
Next
response.write "Unicode Hex Code:" & output
代码执行结果如下:
Length: 12
Unicode Name: ABC123中文
Unicode Hex Code:\u0041\u0042\u0043\u0031\u0032\u0033\u00E4\u00B8\u00AD\u00E6\u2013\u2021
错误1:
Len(input) 返回的是12,而不是8。不确定是否为版本问题?
错误2:
output英文和数字转换成功,但是中文转换失败,而且中文转换出来的结果为3个字节处理。不理解。
错误1是因为,在 UTF-8 编码下,每个中文字符实际上由 3 个字节组成,而非 1 个字节。因此,函数 Len(input) 返回的结果是正确的。
错误2是因为,您的代码使用了 AscW 函数来获取字符的 ASCII 编码,但由于 UTF-8 编码不是基于 ASCII 编码的,因此在 UTF-8 编码下,这种方法无法正确获取中文字符的 Unicode 编码。
要在 UTF-8 编码下正确获取字符的 Unicode 编码,您需要使用其他函数。比如您可以使用 System.Text.Encoding 类中的 GetBytes 函数。以下是更正后的代码:
Function ToUnicodeChar(Char)
dim b, uchar
b = System.Text.Encoding.UTF8.GetBytes(Char)
uchar = ""
For i = 0 To UBound(b)
uchar = uchar & Right("0" & Hex(b(i)), 2)
Next
ToUnicodeChar = "\u" & Right("0000" & uchar, 4)
End Function
input = "ABC123中文"
output = ""
For i = 1 To Len(input)
output = output & ToUnicodeChar(Mid(input, i, 1))
Next
Response.Write "Length: " & Len(input) & "<br>"
Response.Write "Unicode Name: " & input & "<br>"
Response.Write "Unicode Hex Code: " & output
这样,就可以正确地转换为 Unicode 编码了。