objective -c如何用UTF8编码NSArray?

时间:2011-08-28 23:31:42

标签: objective-c nsarray

我的阵列中有斯堪的纳维亚字母,如æ,ø,å。使用NSLog,输出将这些字母表显示为加扰代码。如何用UTF8编码NSArray?任何帮助表示赞赏。

我只尝试过:

NSArray *nnoWords = [[NSArray arrayWithArray:newNoWords] retain];
NSLog (@"nnoWords: %@ ", nnoWords);

newNoWords是一个NSMutableArray。 nnoWords包含从txt文件中获取的正常对象,如NSString hello,pear,apple等。


编辑2011年8月29日:

nnoWords来自于此,转换为NSMutable,然后返回NSArray,因此称为nnoWords。而words.txt以UTF8编码。

     NSArray *noWords = [[NSArray alloc] initWithArray:
        [[NSString stringWithContentsOfFile:[[NSBundle mainBundle] 
    pathForResource:@"words" ofType:@"txt"]                                         
encoding:NSUTF8StringEncoding error:NULL] componentsSeparatedByString:@"\n"]];

我也尝试过:

NSString *norsk = @"æ ø å";
    NSLog (@"%@", norsk);

输出正确:

2011-08-29 13:15:23.302 scanner2[29776:207] æ ø å

2 个答案:

答案 0 :(得分:2)

问题是Xcode控制台。如果您查看Terminal.app的输出,您将看到它符合预期。

测试用例:

//clang -framework Foundation -o log_utf8 log_utf8.m
#import <Foundation/Foundation.h>

int
main(void)
{
  NSString *word = @"en ord på Svenska";
  NSLog(@"%@", word);
}

示例输出:

StackOverflow$ clang -framework Foundation log_utf8.m -o log_utf8
StackOverflow$ ./log_utf8 
2011-08-28 20:10:09.268 log_utf8[65105:707] en ord på Svenska

如果您在查看Xcode可疑内置控制台以外的其他内容时仍然看到乱码,那么您需要检查如何获取字符串数据:

  • 带有非ASCII字符的文本如何进入您的应用程序?
  • NSString认为文本在哪个编码?
  • 它实际上是以什么编码?如果文本来自文件,则file命令可能能够为您解答此问题。

答案 1 :(得分:0)

试试这个:

NSLog(@"%S", [[theArray description] cStringUsingEncoding:NSUTF16LittleEndianStringEncoding]);

来自这个问题:NSLog incorrect encoding