Я работаю над приложением в 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?
Ясно, что символы Юникода отображаются правильно, но, например, пара символов \ '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 в то, с чем справится большинство читателей, но я пока не нашел решения, см., Например:
здесь и здесь .