阿拉伯字符问题

时间:2012-03-27 14:24:30

标签: c# iphone .net unicode

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

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

  • 打印每个字符的值是否足够,并检查它是否位于阿拉伯语Unicode字符之间。 (如字符A的ASCII值为65,Z的字符为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>

4 个答案:

答案 0 :(得分:4)

您应该以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。当我发送文字时,它对我很有用。

答案 1 :(得分:1)

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

这样的代码
  NSString* lableText = [[NSString alloc] initWithData:serverSentData encoding: NSUTF8StringEncoding ];

将NSData转换为NSString并且运行良好!!!

答案 2 :(得分: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];

答案 3 :(得分:0)

这篇文章可能有所帮助:

encode arabic letter unichar to regular letters