我有一个文件,我正在使用stringWithContentsOfFile读入NSString对象。它包含日语字符的Unicode,例如:
\u305b\u3044\u3075\u304f
我认为是
せいふく
我希望我的NSString对象将字符串存储为后者,但它将它存储为前者。
我不太明白的是,当我这样做时:
NSString *myString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil];
它将其存储为:\ u305b \ u3044 \ u3075 \ u304f。
但是当我在字符串中硬编码时:
NSString *myString = @"\u305b\u3044\u3075\u304f";
它正确地将其转换并存储为:せいふく
stringWIthContentsOfFile是否以某种方式转义Unicode?任何帮助将不胜感激。
感谢。
答案 0 :(得分:2)
文件\u305b\u3044\u3075\u304f
只是普通字符。所以你要用字符串来获取它们。您需要在文件中保存实际的日文字符。也就是说,将せいふく
存储在文件中,并将其加载到字符串中。
答案 1 :(得分:0)
Objective-C字符串中的\u305b
之类的东西实际上是编译器的指令,用该字符的实际UTF-8字节序列替换它。读取文件的方法不是编译器,只读取它找到的字节。因此,要获得该字符(官方称为“代码点”),您的文件必须包含该字符的实际UTF-8字节序列,而不是符号表示\u305b
。
有点像\x43
。在您的源代码中,这是四个字符,但它被一个值为0x43的字节替换。因此,如果您将@“\ x43”写入文件,该文件将不包含四个字符'\','x','4','3',它将包含单个字符'C'(其中包含ASCII)值0x43)。
答案 2 :(得分:0)
你可以试试这个,不知道它有多可行..
NSArray *unicodeArray = [stringFromFile componentsSeparatedByString:@"\\u"];
NSMutableString *finalString = [[NSMutableString alloc] initWithString:@""];
for (NSString *unicodeString in unicodeArray) {
if (![unicodeString isEqualToString:@""]) {
unichar codeValue;
[[NSScanner scannerWithString:unicodeString] scanHexInt:&codeValue];
NSString* betaString = [NSString stringWithCharacters:&codeValue length:1];
[finalString appendString:betaString];
}
}
//finalString should have せいふく