gpt4 book ai didi

ios - Localizable.strings 的字符编码,由 genstrings 生成

转载 作者:行者123 更新时间:2023-12-04 11:46:58 34 4
gpt4 key购买 nike

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

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

在终端中,为了生成“Localizable.strings”文件,我输入:
cd Base.lproj/; genstrings ../*.swift; cat Localizable.strings

并得到以下结果:
??/* The \"hello\" word */
"hello" = "hello";

输入时 od -c Localizable.strings ,我得到:
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 工具( grepsedawk )不能很好地处理 utf-16 文件:
grep '=' Localizable.strings 
Binary file Localizable.strings matches

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

另外,我编辑了 Localizable.strings 来替换 "hello";来自 "Hello"; .然后“SourceTree”(我的“git”客户端)无法显示差异,除非我这样做,正如 Can I make git recognize a UTF-16 file as text? 中所建议的那样:
echo '*.strings diff=localizablestrings' > .../.git/../.gitattributes
echo '[diff "localizablestrings"]' >> .../.git/config
echo ' textconv = "iconv -f utf-16 -t utf-8"' >> .../.git/config

苹果 Internationalization and Localization Guide说:

Note: If Xcode warns you that the Localizable.strings file appears to be Unicode (UtF-16), you can convert it to Unicode (UTF-8) using the File inspector.



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

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

我应该转换文件吗?

最佳答案

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

关于ios - Localizable.strings 的字符编码,由 genstrings 生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542388/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com