iphone - 如何可靠地将未知编码的文本文件拉入 iPhone 上的 NSString 中?

标签 iphone encoding utf-8 nsstring ascii

这里是一些代码,我用它来将文本文件拉入名为 textViewUITextView 中。

因为我无法总是提前知道文件的编码,所以我使用方法 -stringWithContentsOfFile:usedEncoding:error:,它通过引用存储编码值。

一旦获得编码,我就会打开文件,如果出现错误,则打印出一些信息:

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; 

在 iPhone 上,如果文件是 UTF8 编码的, TextView 将正确显示文件的内容。

在 iPhone 上,如果文件是 ASCII 编码的 (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

对于 NSASCIIStringEncoding 我应该得到一个值 1,而不是 805298632。

不同的是,如果我通过模拟器打开文件,我会得到正确的编码值,并且 TextView 会显示 ASCII 编码文件的内容。

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

最佳答案

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

关于iphone - 如何可靠地将未知编码的文本文件拉入 iPhone 上的 NSString 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3317263/

相关文章:

iphone - 在特定时间向 iPhone 发送当前位置

video - block 运动补偿编码器 - 如何处理引用帧中的 block 噪声?

iphone - 在 Objective-C 中创建 POST 请求

ios - 如何在Storyboards中的UITableViewController底部添加工具栏?

iphone - sqlite 在 ios 设备上获取速度慢但在模拟器上速度快

python - 如何解释此错误 "UnicodeDecodeError: ' ascii' 编解码器无法解码位置 164 : ordinal not in range(128)"中的字节 0xe2

encoding - 可推断记录的编码

python - Unicode编码/解码

MySQL UTF8 转换 - 为什么要转储数据库?

c++ - 如何将代码点转换为 utf-8?