我正在使用rtf编辑器向用户显示内容。内容使用数据库值组成,有时包含希腊字母。
最初,它们显示为问号? ? ? ?
而非Γ γ Ψ ψ
。
在使用来自CONTENTS和使用JavaScript的显示使用CONTENT.getBytes();
将这些内容作为CONTENT.getBytes("UTF8");
将response.getOutPutStream
编辑为bytearraystream
时,将document.myobj.HttpOpenFileFromStream(contents passed through earlier in response)
更改为Γ γ Ψ ψ
Γ γ Ψ ψ
任何普通文本内容在编辑器中都显示正常,但如果有Γ γ Ψ ψ
等希腊字母,则在编辑器中显示为Γ γ Ψ ψ
。
为了仔细检查,我在放入html页面之前打印了内容,它显示了所需的字符{{1}}但是当它们在RTF编辑器的UI中显示时,它们变为{{1}}。有人可以帮我弄这个吗?
提前致谢。
答案 0 :(得分:0)
RTF无法正常工作。 RTF文件只能包含7位ASCII字符(这是名称的T [ext]部分的一部分),但它们可以通过两种基于文本的编码之一来表示其他字符。 The Wikipedia article on RTF提供了详细信息:
字符转义有两种类型:代码页转义,以及从RTF 1.5开始,Unicode转义。 [...]对于Unicode转义,使用控制字\ u,后跟16位带符号十进制整数,给出Unicode UTF-16代码单元号。为了没有Unicode支持的程序的好处,必须在指定的代码页中跟随此字符的最近表示。例如,\ u1576?将给出阿拉伯字母bā'ب,指明没有Unicode支持的旧程序应该将其作为问号呈现。
因此,字符ΓγΨψ的一个适当的RTF编码将是:
\u915? \u947? \u936? \u968?
当然,任何特定的RTF 软件是否正确处理此类转义序列是一个完全不同的问题。
答案 1 :(得分:0)
谢谢@John。它起作用这是我的代码。
if (ascii <= 128)
{
copyBuffer.append(ch);
}
else
{
copyBuffer.append("\\u"+ascii+"?");
}