阿拉伯字符问题

本文关键字:问题 字符 阿拉伯 | 更新日期: 2023-09-27 18:29:12

我在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>

阿拉伯字符问题

您应该以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文本时,它对我很有效。

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

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

用于将NSData转换为NSString,效果很好!!!

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

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

这篇文章可能会有所帮助:

将阿拉伯字母unichar编码为普通字母