Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective-C:将文件内容读入NSString对象不会';t转换unicode_Objective C_Unicode_Nsstring_Escaping - Fatal编程技术网

Objective-C:将文件内容读入NSString对象不会';t转换unicode

Objective-C:将文件内容读入NSString对象不会';t转换unicode,objective-c,unicode,nsstring,escaping,Objective C,Unicode,Nsstring,Escaping,我有一个文件,我正在使用stringWithContentsOfFile将其读入NSString对象。它包含日文字符的Unicode,例如: \u305b\u3044\u3075\u304f 我相信是的 せいふく 我希望我的NSString对象将字符串存储为后者,但它将其存储为前者 我不太明白的是,当我这样做的时候: NSString *myString = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncodi

我有一个文件,我正在使用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?任何帮助都将不胜感激


谢谢。

文件中的
\u305b\u3044\u3075\u304f
只是普通字符。所以你把它们串起来了。您需要在文件中保存实际的日语字符。也就是说,存储
せいふく在文件中,并将加载到字符串中

类似于Objective-C字符串中的
\u305b
实际上是一条指令,用于编译器将其替换为该字符的实际UTF-8字节序列。读取文件的方法不是编译器,只读取找到的字节。因此,要获取该字符(正式称为“代码点”),文件必须包含该字符的实际UTF-8字节序列,而不是符号表示形式
\u305b


这有点像
\x43
。在源代码中,这是四个字符,但被一个值为0x43的字节替换。因此,如果将@“\x43”写入文件,该文件将不包含四个字符“\”、“x”、“4”、“3”,它将包含单个字符“C”(具有ASCII值0x43)

你可以试试这个,但不知道它有多可行

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 せいふく

您确定您的文件不包含“反斜杠-u-3-0-5-b”序列吗?该文件应包含せいふく 如果这是你想读的,我想这是你说话的方式;但不幸的是,我无法编辑该文件。是否有办法获取\u305b而不是反斜杠-u-3-0-5-b?就我的情况而言,我无法编辑文件以包含日语字符。这是唯一的方法吗?不确定是否还有其他方法。从文件加载后,您可以尝试用实际的unicode字符替换\u****子字符串。毫无疑问,这不是一个非常可行的解决方案。对此的初步测试似乎有效!我希望这一切都能奏效。非常感谢你!