雾隐梧桐 2023-02-02 15:52 采纳率: 100%
浏览 41
已结题

VBscript实现UTF8中文转换为Unicode Hex编码

想用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条回答 默认 最新

  • Oops_GTC 2023-02-02 20:12
    关注

    错误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 编码了。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 2月10日
  • 已采纳回答 2月2日
  • 修改了问题 2月2日
  • 创建了问题 2月2日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改