4

所以,我有一堆这样的字符串: {\b\cf12 よろてそ } 。我想我可以遍历每个字符并用 unicode 转义码(\u###)替换任何 unicode(编辑:任何地方 AscW(char) > 127 or < 0)。但是,我不确定如何以编程方式这样做。有什么建议么?

澄清:

我有一个像 {\b\cf12 よろてそ } 这样的字符串,我想要一个像 {\b\cf12 [STUFF]} 这样的字符串,当我查看 rtf 文本时,其中 [STUFF] 将显示为 よろてそ。

4

2 回答 2

3

您可以简单地使用 AscW() 函数来获得正确的值:-

sRTF = "\u" & CStr(AscW(char))

请注意,与 unicode 的其他转义不同,RTF 使用十进制有符号的 short int(2 字节)表示来表示 unicode 字符。这使得 VB6 中的转换非常容易。

编辑

正如 MarkJ 在评论中指出的那样,您只会对 0-127 之外的字符执行此操作,但您还需要对 0-127 范围内的其他字符进行特殊处理。

于 2009-06-19T09:15:01.320 回答
0

另一种更迂回的方法是将 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

高温高压

于 2009-06-30T15:14:42.757 回答