objective c - 不读取utf-8编码文件

时间:2011-03-22 04:45:50

标签: objective-c utf-8 nsxmlparser

我正在尝试在ios模拟器和ipod touch上显示一些日文文本。从XML文件中读取文本。标题是:

<?xml version="1.0" encoding="utf-8"?>

当文字是英文时,它显示正常。但是,当文本是日文时,它是一个难以理解的单字节字符混搭。

我尝试使用TextEdit将文件专门保存为unicode。我正在使用NSXMLParser来解析数据。任何想法都会非常感激。

这是解析代码

   // Override point for customization after application launch.

    NSString *xmlFilePath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"questionsutf8.xml"];
    NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath];

    NSData *data = [NSData dataWithBytes:[xmlFileContents UTF8String] length:[xmlFileContents lengthOfBytesUsingEncoding: NSUTF8StringEncoding]];                   

    XMLReader *xmlReader = [[XMLReader alloc] init];

    [xmlReader parseXMLData: data];

2 个答案:

答案 0 :(得分:2)

stringWithContentsOfFile:是一种弃用的方法。除非文件包含适当的字节顺序标记,否则它不执行编码检测,否则它将文件解释为默认C字符串编码(+defaultCStringEncoding方法返回的编码)。相反,您应该使用未弃用的[和编码检测]方法stringWithContentsOfFile:usedEncoding:error:

你可以像这样使用它:

NSStringEncoding enc;
NSError *error;
NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath
                                                  usedEncoding:&enc
                                                         error:&error];

if (xmlFileContents == nil)
{
    NSLog (@"%@", error);
    return;
}

答案 1 :(得分:1)

首先,您应该使用TextWrangler(从Mac应用商店或barebones.com免费)验证您的XML文件是否真的是UTF-8编码。

其次,尝试使用+ stringWithContentsOfFile:encoding:error:创建xmlFileContents,显式指定UTF-8编码。或者,更好的是,完全绕过中间字符串,并使用+ dataWithContentsOfFile创建数据:。