Localized.strings 的字符编码,由 genstrings 生成

2023-11-30

在我的“ViewController.swift”中,我有一个本地化字符串:

TheOutLabel.text = NSLocalizedString("hello", comment: "The \"hello\" word")

在终端中,为了生成“Localized.strings”文件,我输入:

cd Base.lproj/; genstrings ../*.swift; cat Localizable.strings

并得到以下结果:

??/* The \"hello\" word */
"hello" = "hello";

打字时od -c Localizable.strings, I get:

0000000  377 376   /  \0   *  \0      \0   T  \0   h  \0   e  \0      \0
0000020    \  \0   "  \0   h  \0   e  \0   l  \0   l  \0   o  \0   \  \0
0000040    "  \0      \0   w  \0   o  \0   r  \0   d  \0      \0   *  \0
0000060    /  \0  \n  \0   "  \0   h  \0   e  \0   l  \0   l  \0   o  \0
0000100    "  \0      \0   =  \0      \0   "  \0   h  \0   e  \0   l  \0
0000120    l  \0   o  \0   "  \0   ;  \0  \n  \0  \n  \0                

当我打字时file Localizable.strings, 它说:

Localizable.strings: Little-endian UTF-16 Unicode c program text

当我用“emacs”打开文件时,它不显示这些字符,当我输入M-x describe-current-coding-system RET, 它说:

Coding system for saving this buffer:
  U -- utf-16le-with-signature-unix (alias: utf-16-le-unix)

因此,文件开头的这些八进制字符 \377 和 \376 看起来像是 utf-16-le BOM,这解释了为什么每个字符后面跟着一个 \0(UTF-16 比在本例中为 UTF-8)。

这是正常/有用/有害的吗?

另外,标准的 *nix 工具(grep, sed, awk)不能很好地处理 utf-16 文件:

grep '=' Localizable.strings 
Binary file Localizable.strings matches

grep -a '=' Localizable.strings | sed -e 's/ = //'
"hello" = "hello";

另外,我编辑了 Localized.strings 来替换"hello"; by "Hello";。然后“SourceTree”(我的“git”客户端)无法显示差异,除非我这样做,如建议的我可以让 git 将 UTF-16 文件识别为文本吗?:

echo '*.strings diff=localizablestrings' > .../.git/../.gitattributes
echo '[diff "localizablestrings"]' >> .../.git/config
echo '  textconv = "iconv -f utf-16 -t utf-8"' >> .../.git/config

Apple's 国际化和本地化指南 says:

注意:如果 Xcode 警告您 Localized.strings 文件似乎 如果是 Unicode (UTF-16),您可以使用以下命令将其转换为 Unicode (UTF-8): 文件检查员。

那么,我应该删除/忽略 BOM 吗?

好像没有genstrings生成 UTF-8 文件的选项。

我应该转换文件吗?


The genstrings该工具被硬编码为以“UTF-16LE with BOM”编码输出字符串文件。我更喜欢将字符串文件保存为 UTF-8,并使用以下 shell 脚本来生成它们:

#!/bin/zsh
function convert {
    for file in $@; do
        print "Converting $file to UTF-8"
        iconv -f utf-16 -t utf-8 $file > temp   
        rm $file; mv temp $file
    done
}
genstrings -o en.lproj *.m
convert en.lproj/*.strings
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Localized.strings 的字符编码,由 genstrings 生成 的相关文章

随机推荐

  • 归并排序最有效的实现

    所以我想知道 Java 中合并排序最有效的实现是什么 如果它的时间效率会根据语言而变化 这个问题可能很微不足道 但我的最终目标是向更有经验的程序员学习 这是我做的两个例子 version I made public static doubl
  • 如何通过循环将数据分组到同一标题下

    我正在尝试从两个连接表中获取数据 从一个表中我收集列表标题 从第二个表中我收集列表数据 型号代码 function view searching type items this gt db gt select searching type
  • ios 8 swift - 如何使用单独的数据源为表格视图添加页脚

    这两天我一直在努力解决这个问题 我只想将页脚 自定义单元格 添加到我的表格视图中 我有一个视图 上面有一些东西 标签 按钮 并且我添加了一个表格视图 为了拥有一个干净的控制器 对于数据源 我使用一个单独的文件 class MyDataSou
  • 解释以下C++方法[重复]

    这个问题在这里已经有答案了 define XL 33 define OR 113 define NOR 313 define TN 344 int to bits int critn char mask unsigned int x int
  • 如何使 window.showmodaldialog 在 chrome 37 中工作?

    我们有一个巨大的网络应用程序 我们使用window showmodaldialog用于警报 确认和弹出窗口 自 Chrome 版本 37 起 此调用已被禁用 有什么快速解决方法吗window showmodaldialog在最新版本的 Ch
  • PHP:包含深度嵌套目录层次结构中的页面 - 性能问题

    假设 我要包含深度嵌套目录层次结构中的一些页面 require path to project views forms member login submit php 我从操作系统课程中了解到 每次我们想要访问 搜索文件时 inode 在u
  • 在二维数组中查找邻居

    有没有一种简单的方法可以找到二维数组中元素的邻居 即元素周围的八个元素 不仅仅是以不同的组合对索引进行减法和加法 如下所示 array i 1 i array i 1 i 1 array i i 1 array i 1 i 等等 伪代码 r
  • C++ 中的网络适配器信息

    在 Windows 8 上 我可以在 C 中使用任何标准函数来获取系统中处理以太网的每个网络接口卡的 IP 地址和网络掩码列表吗 我能想到的获取此类信息的唯一其他方法是解析ipconfig 但我真的不想在 C 中走这条路 微软有一个东西叫I
  • 如何使用 DictationServices.framework

    Mac 10 8 包含私有 DictationServices framework 它永远不会在 App Store 中获得批准 而只是出于兴趣 如何利用它的私有类 方法和消息 root DictationServices framewor
  • iTextSharp - 在合并 PDF 中使用 PDFAction.GotoLocalPage

    我编写了一些代码 将多个 PDF 合并为一个 PDF 然后从 MemoryStream 中显示该 PDF 这很好用 我需要做的是将目录添加到文件末尾 并提供指向每个 PDF 开头的链接 我计划使用 GotoLocalPage 操作来执行此操
  • 自定义 Woocommerce 购物车页面中 2 列的结账字段

    新的 WooCommerce 更新结帐字段后 列的行为很奇怪 这是我的结帐字段自定义 add filter woocommerce checkout fields custom override checkout fields functi
  • powershell中的哈希表

    我正在 PowerShell 中开发一个应用程序 我将变量存储在哈希表中 如何保持哈希表中的顺序 我希望顺序与我填充哈希表时的顺序相同 哈希表本质上不维护值的顺序 网上已经有一些解决方法 检查这些 http www tellingmachi
  • 在同一页面上显示 PHP 表单验证结果

    我确信第一反应会是这样的 这家伙没有谷歌吗 是的 我承认这确实看起来是一个非常基本的概念 我已经尝试过并试图理解它 查找有关该主题的各种帖子和文章等 但一切都无济于事 也许你可以给我指出正确的方向 我有一个基本的联系表单 contact h
  • Unity3D 中的随机数?

    我发现的是如何创建随机数 伟大的 然而 该解决方案在其他功能中不起作用 为了创建一个随机数 我使用了 Random randomDirection new Random int directionChoice randomDirection
  • 从 Excel 单元格捕获时间值

    我正在编写一个 Excel 应用程序 它将从 Excel 文件中读取和写入指定的值 并将它们显示给用户 但是 当我尝试从具有Number Format或键入的函数 hh min Hour Min 我无法准确地获得我想要的值 这是我的代码 w
  • MongoDB 中的反向数组字段

    我有一个集合 其中的位置字段以错误的顺序输入 location 38 7633698 121 2697997 当我尝试使用 在字段上放置二维索引时 db collection ensureIndex location 2d 我收到以下错误
  • 隐藏

    是的 我是一个 CSS 菜鸟 我正在尝试整理隐藏 div 的各种方法 例如 display none visibility hidden 还有更深奥的吗 忘记 JQuery JavaScript 事件 我只是想知道具有大量内容的 div 和
  • 如何将源文件夹添加到 Grails 应用程序

    我使用 STS 来开发 Grails 应用程序 并且需要使用 wsimport 实用程序生成的一堆类 为了不将我的源代码与自动生成的源代码混合在一起 我想添加单独的目录并将生成的类放在那里 如下所示 grails project class
  • 从 etree 中删除一个节点但留下子节点

    我正在遍历 XML 树 但从树中提取节点而留下其内部节点时遇到了一些麻烦 例如
  • Localized.strings 的字符编码,由 genstrings 生成

    在我的 ViewController swift 中 我有一个本地化字符串 TheOutLabel text NSLocalizedString hello comment The hello word 在终端中 为了生成 Localize