所以,我有一堆这样的字符串: {\b\cf12 よろてそ } 。我想我可以遍历每个字符并用 unicode 转义码(\u###)替换任何 unicode(编辑:任何地方 AscW(char) > 127 or < 0
)。但是,我不确定如何以编程方式这样做。有什么建议么?
澄清:
我有一个像 {\b\cf12 よろてそ } 这样的字符串,我想要一个像 {\b\cf12 [STUFF]} 这样的字符串,当我查看 rtf 文本时,其中 [STUFF] 将显示为 よろてそ。
您可以简单地使用 AscW() 函数来获得正确的值:-
sRTF = "\u" & CStr(AscW(char))
请注意,与 unicode 的其他转义不同,RTF 使用十进制有符号的 short int(2 字节)表示来表示 unicode 字符。这使得 VB6 中的转换非常容易。
编辑
正如 MarkJ 在评论中指出的那样,您只会对 0-127 之外的字符执行此操作,但您还需要对 0-127 范围内的其他字符进行特殊处理。
另一种更迂回的方法是将 MSScript.OCX 添加到项目中并与 VBScript 的 Escape 函数接口。例如
Sub main()
Dim s As String
s = ChrW$(&H3088) & ChrW$(&H308D) & ChrW$(&H3066) & ChrW$(&H305D)
Debug.Print MyEscape(s)
End Sub
Function MyEscape(s As String) As String
Dim scr As Object
Set scr = CreateObject("MSScriptControl.ScriptControl")
scr.Language = "VBScript"
scr.Reset
MyEscape = scr.eval("escape(" & dq(s) & ")")
End Function
Function dq(s)
dq = Chr$(34) & s & Chr$(34)
End Function
Main 例程传入原始日文字符,调试输出显示:
%u3088%u308D%u3066%u305D
高温高压