我正在开发 Delphi 2009 中的一个应用程序,它大量使用 RTF,使用 TRichEdit 和 TLMDRichEdit 进行编辑。在这些 RTF 控件中输入日文文本的用户一直在提交关于在安装了东方语言支持的 Win XP 和 Vista 上重新加载内容时日文文本显示为乱码的间歇性报告。
通常情况下,英语和日语是混合的,并且大部分显示都没有问题,例如:
Inventory turns partnerships. 在庫回転率の
(如果日语文本被错误地破坏,我深表歉意 - 我不会说或读这种语言)。
然而,很多时候,只有文本的日文部分会乱码,例如:
ŒÉñ?“]-¦Œüã‚Ì·•Ê‰?-vˆö‚ðŽû‰v‚ÉŒø‰?“I‚ÉŒ‹‚т‚¯‚é’mŽ¯‚ª‘÷Ý‚·‚é?(マーケットセクター、
見込み客の優 先順位と彼らに販売する知識)
从广泛的在线搜索来看,问题似乎是作为 RTF 的一部分保存的字体造成的。日文版 Windows 上显示的字体不一定与美国英文版相同。可以以编程方式替换 RTF 文件中的字体,这会产生几乎可以接受的结果,即
-D‚‚スƒIƒyƒŒ[ƒVƒ・“‚ニƒƒWƒXƒeƒBƒbƒN‚フƒpƒtƒH[ƒ}ƒ“ƒX‚-˜‰v‚ノŒ‹‚ム‚ツ‚ッ‚ネ‚「‚±ニ‚ヘ?A‘‚「‚ノ-ウ‘ハ‚ナ‚ ‚驕B‚サ‚‚ヘAl“セ‚オ‚ス・‘P‚フˆロ‚ƒƒXƒN‚ノ‚ウ‚‚キB
但是,其中仍有不少“垃圾”字符无法正确识别为日文字符。查看原始 RTF,您将看到以下内容:
-D\'82\'82\u65405?\'83I\'83y\'83\'8c[\'83V\'83\u12539?\ldblquote\'82\u65414?
显然,Unicode 字符被正确呈现,但例如 \'82\'82 对字符应该是别的东西吗?我的猜测是它实际上代表了某种双字节字符,出于某种神秘的原因,它被编码为两个单独的字符而不是单个 Unicode 字符。
是否有一种通用的(相对)万无一失的方法来获取包含东方语言的 RTF 并再次可靠地显示它?
为了完整起见,我按以下方式更新了 RTF 字体表:
- 替换了字体名称“?l?r ?o?S?V?b?N;” 与“\'82\'6c\'82\'72\'82\'6f\'83\'53\'83\'56\'83\'62\'83\'4e;”
- 通过将“\froman\fprq1\fcharset0”替换为“\fnil\fprq1\fcharset128”来更新字体名称
- 通过将“\froman\fprq1\fcharset238”替换为“\fnil\fprq1\fcharset128”来更新字体名称
- 通过将“\froman\fprq1”替换为“\fnil\fprq1\fcharset128”来更新字体名称
- 替换字体名称“?? ?????;” 与“\'82\'6c\'82\'72\'82\'6f\'83\'53\'83\'56\'83\'62\'83\'4e;”
更新:单独更新字体名称不会产生影响。语言环境似乎是个大问题。我已经看到一些网站讨论如何将日文 RTF 的显示转换为大多数读者可以处理的内容,但我还没有找到解决方案,例如: here和here。