2012-03-27 12 views
0

私のiPhoneアプリケーションにアラビア語のテキストを表示する際にいくつかの問題があります。 UILabelに表示すると、?????? ????? ??????のように表示されます。この文字列はサーバーからXMLとして取得され、解析されてUILabelに表示されます。これはiPhoneやサーバー側の問題が原因であることはわかりません。アラビア文字の問題

  • サーバーからの文字列が正しくエンコードされており、有効なアラビア文字であることを確認するにはどうすればよいですか。

  • 各文字の値を印刷し、アラビア語のUnicode文字の間にあることを確認するだけで十分ですか? (文字AのASCII値は65、Zの値は90なので、値70はASCII文字でなければなりません)。

  • サーバーでは、文字列はUTF8エンコードでエンコードされます。そして、C#で書かれたサーバプログラム。アラビア語のテキストをサーバーからiPhoneに転送するための書き込みエンコード方式は何ですか?

  • アラビア文字を正しく表示するには、他のフォントを使用する必要がありますか。

  • インターネットにアラビア語のコンテンツを含むXMLファイルがありますか?アラビア語のテキストを正しく解析して表示できますか?事前に

おかげ..

EDIT:

私はXMLデータをNSLoggedとき、私は同じ???? ???? ???文字を得ました。

EDIT

私はコンソールに入ったXMLスタイルのデータを参照してください。

<CB_SEC_COMP> 
<SC_COMP_ID>9999</SC_COMP_ID> 
<SCA_LONG_NAME>???? ????? ?????????? ????? ?????????</SCA_LONG_NAME> 
<SCE_LONG_NAME>CHINA SECURITY &amp; SURVEILLANCE TECHNOLOGY, INC.</SCE_LONG_NAME> 
<SCA_SHORT_NAME>???? ????? ?????????</SCA_SHORT_NAME> 
<SCE_SHORT_NAME>CHINA SECURITY &amp; SUR</SCE_SHORT_NAME> 
<SC_MRK_CODE>9</SC_MRK_CODE> 
<SC_SEC_CODE>86</SC_SEC_CODE> 
<SC_STATUS>Y</SC_STATUS> 
<TICKER_ID>CSR</TICKER_ID> 
<SC_MRK_TYPE_CODE>0001</SC_MRK_TYPE_CODE> 
<SC_EXCHANGE>DFM</SC_EXCHANGE> 
<CUR_CODE>AED</CUR_CODE> 
</CB_SEC_COMP> 
+0

構文解析してUILabelに追加する前に、解析する前にXML文字列にどの値が含まれているかを確認するためにブレークポイントを設定し、コードをデバッグしましたか? XMLでどんな文字を渡すことができ、どんなエンコーディングであるかを調べるために何を研究しましたか? –

+0

サーバーからの応答を処理するiOSコードを表示できますか?あなたのサーバがUTF8でエンコーディングされていることを確認してから、クライアント側でエンコーディングの問題があるように聞こえます。 – Clafou

+0

xmlがUTF8でエンコードされているかどうかわかりませんが、<?xml version = "1.0 "encoding =" UTF-8 "?>それはちょうどいくつかのタグと各タグの値を持っています。私はそれをコンソールに印刷するときにXMLの一部を送るでしょう。 ???? ???? ?????? 不動産インデックス 90000000 ????? ??????? ?????? COMPANY NAME rakeshNS

答えて

1

感謝を。問題はiPhone側ではなかった。サーバーでは、XMLはUTF8文字列に正しくエンコードされませんでした。正しくエンコードすると、有効なアラビア文字が得られます。 NSDataをNSStringに変換するためのコードは

NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding: NSUTF8StringEncoding ]; 

のようにしかできませんでした。

4

UTF-8の両方でサーバーに送信し、テキストを受信する必要があります。 NSString.hをから

:あなたのiOSアプリのコードで

enum { 
    NSASCIIStringEncoding = 1,  /* 0..127 only */ 
    ... 

    **NSUTF8StringEncoding = 4,** 
    ... 

    **NSUTF16StringEncoding = NSUnicodeStringEncoding,**  /* An alias for NSUnicodeStringEncoding */ 
    .... 
}; 
typedef NSUInteger NSStringEncoding; 

は、次のようになります((NSDataの*)serverSentData - サーバから受け取った文字列のNSDataの表現を)

NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding:NSUTF8StringEncoding ]; 

それはだ場合UTF-16:

NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding:NSUTF16StringEncoding ]; 

ところで、あなたはjsonを使用できます。私がサイレントテキストを送っていた時、それは私のためにうまくいった。

0

サーバーはヘッダーでエンコーディングを送信する場合:

<?xml version="1.0" encoding="UTF-8" ?> 

はその後、組み込みまたはその他のよく書かれたXMLパーサーが正しい方法でPCDATA(タグの間のテキスト)を処理し、デコードします。サーバーがこの情報を送信せず、サーバー側で変更できない場合は、サーバーが使用しているエンコードを推測して、結果を手動でUTF-8に変換する必要があります。あなたの文字列が、純粋な16ビットUnicodeである場合たとえば、あなたは、このようにそれを行うことができます。

NSString *responseString = [[[NSString alloc] initWithData:responseData encoding:NSUnicodeStringEncoding] autorelease]; 
NSData* convertedData = [responseString dataUsingEncoding:NSUTF8StringEncoding]; 
+0

私は<?xml version = "1.0" encoding = "UTF-8"のようなヘッダを取得していませんか?>。これは、サーバー側でDataSet.GetXML http://msdn.microsoft.com/en-us/library/system.data.dataset.getxml(v=vs.71).aspxというメソッドを使用するためです。これはデフォルトで<?xml version = "1.0" encoding = "UTF-8"?>を挿入しません。どのようにしても、文字列をデータに変換した方法を確認できます。あなたの興味に感謝します。 – rakeshNS