阿拉伯字符问题
本文关键字:问题 字符 阿拉伯 | 更新日期: 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 & SURVEILLANCE TECHNOLOGY, INC.</SCE_LONG_NAME>
<SCA_SHORT_NAME>???? ????? ?????????</SCA_SHORT_NAME>
<SCE_SHORT_NAME>CHINA SECURITY & 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编码为普通字母