阿拉伯字符问题
我在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>
感谢所有的答案。问题不在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];
我没有像那样获取标题。这是因为,在服务器侧上使用的方法DataSet.GetXML http://msdn.microsoft.com/en-us/library/system.data.dataset.getxml(v=vs.71).aspx,默认不会把。任何方式让我检查你已经将字符串转换为数据的方式。感谢您的关注。 – rakeshNS 2012-04-10 11:53:26
您是否尝试过设置断点和调试代码,看看它有XML字符串中什么样的价值,你解析它之前,你解析后,你将它添加到以前的UILabel?你做了哪些研究来确定可以在XML中传递哪些字符以及以何种编码进行传递? – 2012-03-27 14:34:40
你可以在你处理服务器响应的地方显示你的iOS代码吗?这听起来像它可能是在客户端的编码问题(因为您确认您的服务器是UTF8编码) – Clafou 2012-03-27 14:53:09
我不知道的是,XML在UTF8编码,它不具有头部像。它只是有一些标签和每个标签的值。打印到控制台时,我会发送一部分XML。 ???? ???? ?????? 房地产指数 90000000 NO_OF_FULLY_PAIDUP_SHARES> ????? ??????? ?????? SCA_SHORT_NAME> 公司名称 SCE_SHORT_NAME> –
rakeshNS
2012-03-28 12:20:28