【问题标题】:Get text of .strings file获取 .strings 文件的文本
【发布时间】:2014-01-26 16:16:08
【问题描述】:

我正在尝试在UITextView 中显示.strings 文件的文本。这是我的代码:

self.textview.text = [[NSString alloc] initWithContentsOfFile:self.txtPath encoding:NSUTF8StringEncoding error:nil];

但似乎编码错误,因为每次我 UITextView 都是空白的,里面没有文字。但它适用于.txt.log 和其他文件。那么如何获取.strings 文件的文本呢?

【问题讨论】:

  • 你是如何获得 txtPath 的?贴出代码
  • 调试分开的步骤。首先将文件内容放入NSStringNSLog 中。第二个第二步将字符串分配给textview。这样你就可以划分问题了。在这种情况下,您会看到由于编码不正确,因此无法获取字符串。请参阅@maddy 的答案。
  • @Zaph 我可以获取任何其他文件的文件内容,但不能获取.strings。它具有这种文件格式。
  • 重点是“如何调试”:分解复合语句。在这种情况下,问题变得更简单:“读取字符串文件失败。”事实上,在编写代码时会回避复合语句,并依赖编译器在发布版本中删除它们。除非/直到出现性能问题,否则不要优化任何东西,然后使用分析器找到需要改进的确切内容。为了可读性和简单性而编写。

标签: ios objective-c encoding localizable.strings


【解决方案1】:

.strings 文件通常使用NSUTF16LittleEndianStringEncoding 编码创建,而不是 UTF-8。

顺便说一句 - 您可以轻松查看 Xcode 项目中任何文件的编码。在 Xcode 中调出右窗格。然后在项目树中选择一个文件。在右窗格中,查找“文本设置”部分。它有一个“文本编码”条目。

另一件事。更容易解决这样的问题。分解代码以便于调试并使用error参数。

NSError *error = nil;
NSString *text = [[NSString alloc] initWithContentOfFile:self.txtPath encoding:NSUTF8StringEncoding error:&error];
if (text) {
    self.textview.text = text;
} else {
    NSLog(@"Unable to load text from %@: %@", self.txtPath, error);
}

【讨论】:

  • 我项目中的 .string 文件是用 NSUTF8StringEncoding 编码的,但是 NSUTF8StringEncoding 不起作用。我也像你说的那样用 NSUTF16LittleEndianStringEncoding 尝试过,但是我得到了很多中文(图片在原帖中)有没有办法检测编码?使用 NSUTF16LittleEndianStringEncoding 时没有错误。
  • 这是我得到的错误:Error Domain=NSCocoaErrorDomain Code=261“操作无法完成。(Cocoa 错误 261。)”UserInfo=0x1782665c0 {NSFilePath=/Applications/AdSheet.app /French.lproj/Localizable.strings, NSStringEncoding=4}
  • 该错误似乎验证文件不是 UTF-8 格式。此字符串文件的 Xcode 右侧窗格中显示的文本编码是什么?
  • 我不知道,该文件不在我的 xcode 项目中,它在“/Applications/AdSheet.app/French.lproj/Localizable.strings”中,该文件在 AdSheet 应用程序中。
  • 在您的计算机上打开一个终端 (iTerm)。输入cd /Applications/AdSheet.app/French.lproj。然后输入file Localizable.strings。结果如何?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-03
  • 1970-01-01
  • 2010-11-07
  • 2012-11-26
  • 1970-01-01
  • 1970-01-01
  • 2016-07-12
相关资源
最近更新 更多