【问题标题】:objective-c how to encode NSArray with UTF8?Objective-c 如何用 UTF8 编码 NSArray?
【发布时间】:2011-11-05 16:27:55
【问题描述】:

我的数组中有斯堪的纳维亚字母,例如æ、ø、å。使用 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] æ ø å

【问题讨论】:

  • 数组中的对象是什么类型的?
  • @vikingosegundo 添加了更多信息。
  • 在 NSLog 所在行设置断点并检查 nnoWords。数组中的字符串是什么样的?文本文件有 utf-8 编码吗?
  • @ott 我知道断点,但我不知道如何检查 nsarray?

标签: objective-c nsarray


【解决方案1】:

问题在于 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 命令可能会为您解答。

【讨论】:

  • 你是对的。当我将 nsarray noWords 写入 txtfile 时,没有乱码,所以问题在于 Xcode 的内置控制台。但是我该如何解决呢?
  • 你没有;苹果可以。归档雷达。由于这实际上不会影响文本标签或字段中显示的任何文本或写入文件中的任何文本,因此只是给开发带来不便。
【解决方案2】:

试试这个:

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

来自这个问题:NSLog incorrect encoding

【讨论】:

  • 它仍然没有帮助。输出和之前一样:应该是“på, etc.”,但显示的是“"p\U00e5"”。
猜你喜欢
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 2011-06-22
  • 2010-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多