阿拉伯字符问题

阿拉伯字符问题

问题描述:

我在iPhone应用程序中显示一些阿拉伯文字时遇到了一些问题。当我在UILabel上显示它时,它显示为?????? ????? ??????该字符串从服务器作为XML来解析,并显示在UILabel上。我不知道这是由于在iPhone或从服务器端的问题。阿拉伯字符问题

  • 我想知道如何确定来自服务器的字符串是否具有正确的编码,并且是有效的阿拉伯字符。

  • 是否足够打印每个字符的值并检查它位于阿拉伯Unicode字符之间。 (就像字符A的ASCII值是65而Z的ASCII值是90.所以值70必须是ASCII字符)。

  • 在服务器中,字符串使用UTF8编码进行编码。和用C#编写的服务器程序。什么是写阿拉伯文字从服务器到iPhone的编码方法?

  • 我是否需要使用其他字体才能正确显示阿拉伯字符。

  • 在互联网中是否有任何带有阿拉伯语内容的XML文件,从哪里我可以正确解析和显示阿拉伯文字?

在此先感谢..

编辑:

当我NSLogged XML数据我有同样的???? ???? ???字符。

编辑

见我在控制台有一个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

您是否尝试过设置断点和调试代码,看看它有XML字符串中什么样的价值,你解析它之前,你解析后,你将它添加到以前的UILabel?你做了哪些研究来确定可以在XML中传递哪些字符以及以何种编码进行传递? – 2012-03-27 14:34:40

+0

你可以在你处理服务器响应的地方显示你的iOS代码吗?这听起来像它可能是在客户端的编码问题(因为您确认您的服务器是UTF8编码) – Clafou 2012-03-27 14:53:09

+0

我不知道的是,XML在UTF8编码,它不具有头部像。它只是有一些标签和每个标签的值。打印到控制台时,我会发送一部分XML。 ???? ???? ??????房地产指数 90000000 NO_OF_FULLY_PAIDUP_SHARES> ????? ??????? ?????? SCA_SHORT_NAME> 公司名称 SCE_SHORT_NAME> – rakeshNS 2012-03-28 12:20:28

感谢所有的答案。问题不在iPhone端。在服务器中,XML未正确编码为UTF8字符串。当它正确编码时,我得到了有效的阿拉伯字符。我只是做了这样的代码

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

为NSData的转换为NSString的,效果不错!

你应该发送和接收来自服务器的文本都在UTF-8!

从NSString.h:

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

    **NSUTF8StringEncoding = 4,** 
    ... 

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

在iOS应用的代码应该像如下:((NSData的*)serverSentData - 从服务器收到字符串的NSData的表示)

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

,如果它是UTF-16:

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

顺便说一下,您可以使用json。当我发送cyrylic文本时它对我很好。

如果您的服务器在头发送编码:

<?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

我没有像那样获取标题。这是因为,在服务器侧上使用的方法DataSet.GetXML http://msdn.microsoft.com/en-us/library/system.data.dataset.getxml(v=vs.71).aspx,默认不会把。任何方式让我检查你已经将字符串转换为数据的方式。感谢您的关注。 – rakeshNS 2012-04-10 11:53:26

这篇文章可能会有帮助:

encode arabic letter unichar to regular letters