VBScript有没有办法支持将十六进制转换为十进制到超出ChrW(65535)
范围的char?
例如,\u2122
为h&2122
(十六进制),并转换为十进制值8482
,使用ChrW
打印™
Response.Write ChrW(cLng("&h2122"))
结果:
™
......到目前为止一切都很好。
有超出ChrW
范围的字符,例如“G clef”字符U+1D11E
(utf-16)映射到十进制119,070,超出ChrW()
的范围
有没有办法在VBScript
中使用那些较高的字符?
答案 0 :(得分:0)
您可以尝试使用该字符的utf16-le(或utf16-be)编码的代理对编码值,并将它们分配给两个单独的chrW调用并合并结果。
Dim tmChar
tmChar = ChrW(&HD834) & ChrW(&HDD1E)
' You will probably see just a square or a question mark or some place holder here, depending on system and font support
MSGBox("Wow: " & tmChar)
'Have also a thinking face emoji as an additional example
tmChar = ChrW(&HD83E) & ChrW(&HDD14)
MSGBox("Hummm... " & tmChar)
我认为vbs字符串存储utf16-le“单位”,而不是字符或代码点。
请注意: “ G clef”是与代码点编号119070(十六进制的1D11E)相对应的Unicode字符。 “ G谱号”是U + 1D11E Unicode stop 作为代理对单位的“ G谱号”为0xD834 0xDD1E 编码为UTF16-BE的“ G谱号”为0xD8 0x34 0xDD 0x1E 编码为UTF16-LE的“ G谱号”为0x34 0xD8 0x1E 0xDD