Tôi đang làm việc trên một ứng dụng trong Delphi 2009, sử dụng nhiều RTF, được chỉnh sửa bằng TRichEdit và TLMDRichEdit. Người dùng nhập văn bản tiếng Nhật trong các điều khiển RTF này đã gửi các báo cáo liên tục về văn bản tiếng Nhật được hiển thị dưới dạng vô nghĩa khi tải lại nội dung, cả trên Win XP và Vista, với cài đặt Hỗ trợ Ngôn ngữ Đông.Cách hiển thị chính xác Phông chữ RTF Nhật Bản
Thông thường, tiếng Anh và tiếng Nhật là hỗn hợp và chủ yếu được hiển thị mà không có một vấn đề, ví dụ:
Inventory turns partnerships. 在庫回転率の
(lời xin lỗi của tôi nếu văn bản tiếng Nhật được chia không chính xác - tôi không nói hoặc đọc các ngôn ngữ).
Khá thường xuyên tuy nhiên, chỉ có phần tiếng Nhật của văn bản sẽ vô nghia, ví dụ:
ŒÉñ?“]-¦Œüã‚Ì·•Ê‰?-vˆö‚ðŽû‰v‚ÉŒø‰?“I‚ÉŒ‹‚т‚¯‚é’mŽ¯‚ª‘÷Ý‚·‚é?(マーケットセクター、
見込み客の優 先順位と彼らに販売する知識)
Từ tìm kiếm trực tuyến rộng lớn, có vẻ như vấn đề là do hậu quả của các phông chữ lưu lại dưới dạng một phần của RTF. Phông chữ hiện diện trên phiên bản tiếng Nhật của Windows không nhất thiết phải giống như phiên bản tiếng Anh của Hoa Kỳ. Có thể lập trình thay thế các font trong file RTF trong đó sản lượng một kết quả gần như chấp nhận được, ví dụ:
-D‚‚スƒIƒyƒŒ[ƒVƒ・“‚ニƒƒWƒXƒeƒBƒbƒN‚フƒpƒtƒH[ƒ}ƒ“ƒX‚-˜‰v‚ノŒ‹‚ム‚ツ‚ッ‚ネ‚「‚±ニ‚ヘ?A‘‚「‚ノ-ウ‘ハ‚ナ‚ ‚驕B‚サ‚‚ヘAl“セ‚オ‚ス・‘P‚フˆロ‚ƒƒXƒN‚ノ‚ウ‚‚キB
Tuy nhiên, vẫn còn khá nhiều "rác" nhân vật trong đó mà không được công nhận một cách chính xác như nhân vật Nhật Bản. Nhìn vào RTF thô bạn sẽ thấy như sau:
-D\'82\'82\u65405?\'83I\'83y\'83\'8c[\'83V\'83\u12539?\ldblquote\'82\u65414?
Rõ ràng, các ký tự Unicode được hiển thị chính xác, nhưng ví dụ: cặp nhân vật \ '82 \ '82 phải là cái gì khác? Tôi đoán là nó thực sự đại diện cho một nhân vật đôi byte của một số loại, đó là vì một số lý do bí ẩn được mã hóa như hai nhân vật riêng biệt chứ không phải là một ký tự Unicode duy nhất.
Có cách nào chung chung, (tương đối) dễ hiểu để có RTF có chứa ngôn ngữ phương Đông và hiển thị lại một lần nữa không?
Đối với đầy đủ sake, tôi cập nhật bảng chữ RTF theo cách sau:
- thay thế tên font "l r o S V b N;??????" với "\ '82 \ '6c \ '82 \ '72 \ '82 \' 6f \ '83 \ '53 \ '83 \ '56 \ '83 \ '62 \ '83 \ '4e;"
- Cập nhật tên phông chữ bằng cách thay thế "\ froman \ fprq1 \ fcharset0" với "\ fnil \ fprq1 \ fcharset128"
- Cập nhật tên phông chữ bằng cách thay thế "\ froman \ fprq1 \ fcharset238" với "\ fnil \ fprq1 \ fcharset128"
- Cập nhật tên phông chữ bằng cách thay thế "\ froman \ fprq1" bằng "\ fnil \ fprq1 \ fcharset128"
- Thay thế tên phông chữ "?? ?????;" với "\ '82 \ '6c \ '82 \ '72 \ '82 \' 6f \ '83 \ '53 \ '83 \ '56 \ '83 \ '62 \ '83 \ '4e;"
Cập nhật: Cập nhật tên phông chữ một mình sẽ không tạo sự khác biệt. Ngôn ngữ có vẻ là vấn đề lớn. Tôi đã thấy một vài trang thảo luận về cách chuyển đổi hiển thị RTF Nhật Bản thành một thứ mà hầu hết người đọc sẽ xử lý, nhưng tôi chưa tìm được giải pháp, xem ví dụ: here và here.
Nếu có nhiều hơn một thư viện RTF, các bản dịch khác nhau từ/đến RTF là một lý do tiềm năng. Nếu người viết RTF phát ra mã mà người đọc không hiểu, mọi thứ đều có thể. – mjn
Tên phông chữ \ '82l \' 82r \ '82o \' 83S \ '83V \' 83b \ '83N được hiển thị dưới dạng' MS PGothic'' khi mở bằng Wordpad trên Windows 10. Khi được mở bằng LibreOffice hoặc bằng Wordpad Win 7, nó được hiển thị là ''MS P ゴ シ ッ ク''. – mjn
Lưu ý rằng tên phông chữ? L? R? O? S? V? B? N; trong câu hỏi của bạn dường như đã bị hỏng, tôi đoán rằng đó là \ '82l \' 82r \ '82o \' 83S \ '83V \' 83b \ '83N ở trạng thái trước của tài liệu. – mjn