2009-05-01 9 views
5

मैं डेल्फी 200 9 में एक आवेदन पर काम कर रहा हूं जो आरटीएफ का भारी उपयोग करता है, जिसे TRichEdit और TLMDRichEdit का उपयोग करके संपादित किया जाता है। इन आरटीएफ नियंत्रणों में जापानी पाठ में प्रवेश करने वाले उपयोगकर्ता पूर्वी भाषा समर्थन स्थापित होने के साथ, Win XP और Vista दोनों पर सामग्री को फिर से लोड करते समय जापानी टेक्स्ट को गड़बड़ के रूप में प्रदर्शित होने के बारे में अस्थायी रिपोर्ट सबमिट कर रहे हैं। (- मैं बात या भाषा पढ़ नहीं है जापानी पाठ ग़लत ढंग से टूटी हुई है मेरी क्षमा याचना)जापानी आरटीएफ फ़ॉन्ट्स को सही तरीके से प्रदर्शित करने के लिए कैसे करें

Inventory turns partnerships. 在庫回転率の 

:

आमतौर पर, अंग्रेजी और जापानी मिलाया जाता है और ज्यादातर, एक समस्या के बिना प्रदर्शित किया जाता है, उदाहरण के लिए।

काफी अक्सर हालांकि, सिर्फ पाठ के जापानी भाग निरर्थक शब्द, उदाहरण के लिए होगा:

ŒÉñ?“]-¦Œüã‚Ì·•Ê‰?-vˆö‚ðŽû‰v‚ÉŒø‰?“I‚ÉŒ‹‚т‚¯‚é’mŽ¯‚ª‘÷Ý‚·‚é?(マーケットセクター、 
見込み客の優 先順位と彼らに販売する知識) 

व्यापक ऑनलाइन खोज से, ऐसा लगता है फोंट के भाग के रूप में सहेजा का एक परिणाम के रूप में है कि समस्या आरटीएफ विंडोज़ के जापानी भाषा संस्करण पर मौजूद फ़ॉन्ट्स एक अमेरिकी अंग्रेजी संस्करण के समान नहीं हैं। यह प्रोग्राम RTF फ़ाइल जो लगभग एक स्वीकार्य परिणाम पैदावार में फोंट बदलने के लिए संभव है अर्थात

-D‚‚スƒIƒyƒŒ[ƒVƒ・“‚ニƒƒWƒXƒeƒBƒbƒN‚フƒpƒtƒH[ƒ}ƒ“ƒX‚-˜‰v‚ノŒ‹‚ム‚ツ‚ッ‚ネ‚「‚±ニ‚ヘ?A‘‚「‚ノ-ウ‘ハ‚ナ‚ ‚驕B‚サ‚‚ヘAl“セ‚オ‚ス・‘P‚フˆロ‚ƒƒXƒN‚ノ‚ウ‚‚キB 

हालांकि, अभी भी कर रहे हैं वहाँ में काफी कुछ "जंक" वर्ण जो सही ढंग से जापानी वर्णों के रूप में मान्यता प्राप्त नहीं हैं। कच्चे आरटीएफ आप को देखते हुए निम्नलिखित दिखाई देगा:

-D\'82\'82\u65405?\'83I\'83y\'83\'8c[\'83V\'83\u12539?\ldblquote\'82\u65414? 

जाहिर है, यूनिकोड वर्ण सही ढंग से प्रदान की गई हैं, लेकिन उदाहरण के लिए \ '82 \ '82 पात्रों की जोड़ी कुछ और किया जाना चाहिए? मेरा अनुमान है कि यह वास्तव में किसी प्रकार के डबल बाइट चरित्र का प्रतिनिधित्व करता है, जो कुछ रहस्यमय कारणों के लिए एक यूनिकोड चरित्र के बजाय दो अलग-अलग वर्णों के रूप में एन्कोड किया गया था।

क्या पूर्वी भाषा वाले आरटीएफ लेने और विश्वसनीय रूप से इसे फिर से प्रदर्शित करने के लिए एक सामान्य, (अपेक्षाकृत) मूर्खतापूर्ण तरीका है?

पूर्णता के लिए, मैं निम्नलिखित तरीके से आरटीएफ फ़ॉन्ट तालिका अद्यतन:

  • फ़ॉन्ट का नाम बदला गया "एल आर ओ एस वी बी एन;??????" "\ '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"
  • "\ fanil \ fprq1 \ fcharset128"
  • के साथ "\ froman \ fprq1" को प्रतिस्थापित करके अपडेट किए गए फ़ॉन्ट नाम फ़ॉन्ट नाम को बदलना "?? ?????;" "\ '82 \ '6c \ '82 \ '72 \ '82 \' 6f \ '83 \ '53 \ '83 \ '56 \ '83 \ '62 \ '83 \ '4e;" के साथ

अपडेट: अद्यतन कर रहा है फ़ॉन्ट नामों अकेले अभ्यस्त एक फर्क। लोकेल बड़ी समस्या प्रतीत होता है। मैंने जापानी आरटीएफ के प्रदर्शन को बदलने के तरीकों पर चर्चा करने के कुछ तरीकों पर चर्चा की है, जो कि अधिकांश पाठक संभाल लेंगे, लेकिन मुझे अभी तक कोई समाधान नहीं मिला है, उदाहरण के लिए देखें: here और here

+0

यदि एक से अधिक आरटीएफ पुस्तकालय शामिल हैं, तो आरटीएफ से अलग अनुवाद एक संभावित कारण हैं। यदि आरटीएफ लेखक कोड को उत्सर्जित करता है जिसे पाठक समझ में नहीं आता है, तो सबकुछ संभव है। – mjn

+0

फ़ॉन्ट नाम \ '82l \' 82r \ '82o \' 83S \ '83V \' 83b \ '83N को' 10 एमएस पीगोथिक 'के रूप में दिखाया गया है जब विंडोज 10 पर वर्डपैड के साथ खोला गया था। जब लिबर ऑफिस के साथ खोला गया था, या वर्डपैड के साथ विन 7, इसे 'एमएस पी ゴ シ ッ ク' 'के रूप में दिखाया गया है। – mjn

+0

ध्यान दें कि फ़ॉन्ट का नाम? एल? आर? ओ? एस? वी? बी? एन; आपके प्रश्न में पहले से ही भ्रष्ट प्रतीत होता है, मुझे लगता है कि दस्तावेज़ की पिछली स्थिति में यह \ '82l \' 82r \ '82o \' 83S \ '83V \' 83b \ '83N है। – mjn

उत्तर

1

मेरा अनुमान है कि आरटीएफ में फ़ॉन्ट नाम बदलने से शायद चीजें बदतर हो गई हैं। यदि आरटीएफ में निर्दिष्ट एक फ़ॉन्ट यूनिकोड फ़ॉन्ट नहीं है, तो निश्चित रूप से उस फ़ॉन्ट में प्रस्तुत किए जाने वाले वर्णों को शिफ्ट-जेआईएस के रूप में एन्कोड किया जाएगा, न कि यूनिकोड के रूप में। और फिर पाठ में अन्य पात्र भी होंगे। इसलिए यूनिकोड के रूप में पूरी चीज का इलाज करना, या यूनिकोड टेक्स्ट जोड़ना, भ्रष्टाचार का कारण बन जाएगा। आपको यह स्थापित करने की आवश्यकता है कि आपके द्वारा आयात किया गया आरटीएफ शिफ्ट-जेआईएस या यूनिकोड एन्कोड किया गया है, और यह भी कि आप जिस मशीन पर चल रहे हैं (और इसलिए डी 2009 डिफ़ॉल्ट इनपुट प्रारूप) जापानी है या नहीं। जापान में, यदि एक टेक्स्ट फ़ाइल में यूनिकोड बीओएम नहीं है तो यह आमतौर पर शिफ्ट-जेआईएस (लेकिन हमेशा नहीं) होगा।

+1

आगे की जांच से पता चला कि फ़ॉन्ट बदलना एक अच्छा विचार नहीं है। विशेष रूप से, निर्दिष्ट वर्णसेट को बदलना नो-नो है, क्योंकि \ fcharset0 एएनएसआई है और \ fcharset128 शिफ्ट-जेआईएस है। कम से कम सतह पर, ऐसा लगता है कि अलग-अलग वर्णों के साथ विभिन्न फ़ॉन्ट्स के बीच स्वैपिंग करने से आप उपयोगकर्ता द्वारा दर्ज किए गए सही तरीके से एन्कोड करने की अनुमति देंगे। दुर्भाग्यवश, यह अभी भी स्पष्ट नहीं है कि क्यों आरटीएफ नियंत्रण सही प्रदर्शन को समझ नहीं सकता है। नमूना कोड के लिए – Ryan

1

मैं कुछ समान दिख रहा था, लेकिन जापानी फोंट के साथ नहीं। सूक्ष्म विशेष जैसे माइक्रो (जैसे microliters) और सुपरस्क्रिप्ट। समस्या यह थी कि भले ही आरटीएफ स्ट्रिंग मैं एएसपी.नेट वेबपेज से उपयोगकर्ता को भेज रहा था, सही था (मैं फिडलर 2 का उपयोग करके एन्कोडेड आरटीएफ स्ट्रीम देख सकता था), जब एमएस वर्ड ने वास्तव में आरटीएफ खोला, तो उसने कचरा भागने का एक गुच्छा जोड़ा कोड जो मैं आपके नमूने में देखता हूं।

मैंने जो किया वह पूरे आरटीएफ पाठ को एक रूपांतरण दिनचर्या के माध्यम से चलाने के लिए किया गया था जो सभी पात्रों को एसीआई 127 पर अपने विशेष यूनिकोड बिंदु के बराबर बदल देता था। तो मुझे कुछ \ \uc1 \ u181 मिल जाएगा? (माइक्रो) विशेष पात्रों के लिए। जब मैंने ऐसा किया, तो शब्द फ़ाइल को कोई समस्या नहीं खोल पाया। विडंबना यह है कि, यह \ uc1 \ uxxx फिर से एन्कोड किया गया? उनके आरटीएफ वापस समकक्ष से बच निकला।

Private Function ConvertRtfToUnicode(ByVal value As String) As String 

    Dim ch As Char() = value.ToCharArray() 
    Dim c As Char 
    Dim sb As New System.Text.StringBuilder() 
    Dim code As Integer 

    For i As Integer = 0 To ch.Length - 1 
     c = ch(i) 
     code = Microsoft.VisualBasic.AscW(c) 
     If code <= 127 Then 
      'Don't need to replace if one of your typical ASCII codes 
      sb.Append(c) 
     Else 
      'MR: Basic idea came from here http://www.eggheadcafe.com/conversation.aspx?messageid=33935981&threadid=33935972 
      ' swaps the character for it's Unicode decimal code point equivalent 
      sb.Append(String.Format("\uc1\u{0:d}?", code)) 
     End If 
    Next 

    Return sb.ToString() 

End Function 

सुनिश्चित नहीं है कि इससे आपकी समस्या में मदद मिलेगी, लेकिन यह मेरे लिए काम कर रही है।

+0

धन्यवाद! मैंने शुरुआत में कुछ ऐसा करने की कोशिश की, लेकिन इससे कोई फर्क नहीं पड़ता क्योंकि आरटीएफ चरित्र धारा में कोई यूनिकोड नहीं था। यह अभी भी आसपास रखने के लिए एक बेहद उपयोगी काम है। – Ryan

संबंधित मुद्दे

 संबंधित मुद्दे