如何可靠地将未知编码的文本文件拖入iPhone上的NSString?

时间:2010-07-23 10:21:19

标签: iphone encoding utf-8 nsstring ascii

以下是一些代码,用于将文本文件拖入名为UITextView的{​​{1}}。

因为我不能总是提前知道文件的编码,所以我使用方法textView,它通过引用存储编码值。

一旦我进行了编码,然后打开文件,如果出现错误,请打印出一些信息:

-stringWithContentsOfFile:usedEncoding:error:

在iPhone上,如果文件是UTF8编码的,文本视图会正确显示文件的内容。

在iPhone上,如果文件是ASCII编码的(NSError *_error = nil; NSStringEncoding _textEncoding; NSString *_contentText = [NSString stringWithContentsOfFile:[baseURL path] usedEncoding:&_textEncoding error:&_error]; if (_error) { NSLog(@" _error: %@", [_error userInfo]); NSLog(@" _textEncoding: %d", _textEncoding); } textView.text = _contentText; ),那么我会得到一个奇怪的字符串编码值:

NSASCIIStringEncoding

对于2010-07-23 02:57:46.786 App[9160:307] _error: { NSFilePath = "/var/mobile/Applications/0AD83E02-7A2A-4665-8B8F-17E03EE12B9E/Documents/A+B.txt"; } 2010-07-23 02:57:46.791 App[9160:307] _textEncoding: 805298632 我应该得到值1,而不是805298632。

扭曲是,如果我通过模拟器打开文件,我得到正确的编码值,文本视图显示ASCII编码文件的内容。

我认为我的语法正确,但我想我错过了一些可能很明显的东西。我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

  1. stringWithContentsOfFile:usedEncoding:error:失败。记录错误详细信息以确定原因。
  2. 格式说明符应为%lxNSStringEncodingNSUInteger,它是设备上的unsigned long。一些枚举值是十六进制值。
  3. 正在创建的文件是什么平台?您是否肯定编码实际上是ASCII?您需要对文件执行hexdump以验证编码是否有效。
  4. 尝试将_textEncoding初始化为0.枚举常量从1开始。
  5. 在传递给视图之前,添加一个防护来测试返回的字符串是否为nil。根据{{​​3}},如果出现错误,则返回为零。