【问题标题】:Unicode filenames in iOSiOS 中的 Unicode 文件名
【发布时间】:2016-10-20 23:32:40
【问题描述】:

是否可以在 iOS 中的资产(图像)文件名中使用全范围(比方说)中文?如果不支持,文件名、字符串搜索和其他文件处理活动支持大语言的哪些部分?

【问题讨论】:

  • 你试过了吗?成功了吗?
  • 理论上,整个中文“字母表”应该可以工作……但作为一个不会说/写/读的非中国人,检查是一项艰巨的任务。还有其他语言的问题……我也不知道。所以,不,我没有尝试过。并且无法进行详尽(或准确)的测试。我希望知道的人提供权威的参考或答案。
  • 我认为,也许是错误的,Apple 一直在谈论支持 unicode 和本地化,他们的文件系统完全有能力,这意味着他们支持所有语言和所有字符集。但我不想依赖这个假设,而没有来自对这些问题更了解的消息来源的某种确定性。几乎是我以外的任何人。
  • 是的,完全支持 unicode 字符。

标签: ios unicode filenames


【解决方案1】:

iOS 和 Mac OS 目前使用 HFS+ filesystem,它支持文件名中的完整 Unicode。这基本上意味着任何字符,包括中文和其他人类语言。文件系统最多允许 255 个字符,对于大多数语言来说大约是 255 个代码点。 (我看到一个注释,长度基于 UTF16 编码的字符。有些字符需要超过 16 位才能编码,例如表情符号,您也可以使用它,但允许的字符更少。)

iOS 上的文件 API(NSFileManager 等)无需任何额外工作即可容纳 Unicode 字符串。请注意,Unicode 序列以特定方式规范化:例如é 字符可以在 Unicode 中以多种不同的方式表示,但将以标准化方式分解为文件名。

底线是,您可以随意使用 Unicode 字符串作为文件名,只要它们的长度合理。因为超长的 Unicode 名称会以一种稍微不可预测的方式开始遇到长度问题(实际上只是复杂且不需要计算),您可能应该设置一些合理的自我强加的长度限制。

APFS 是 Apple 正在开发的下一代文件系统,很快就会出现在 iOS 上。我找不到有关文件名编码的信息,但可以公平地假设它会支持任何 HFS+ 支持的东西,如果不是更多的话。

【讨论】:

    【解决方案2】:

    iOS 文件系统使用区分大小写的 HFSX,它是 HFS Plus 的变体,对文件名和字符编码使用相同的规则。

    这些规则在Apple Technote 1150 的几个部分中列出。

    重要的考虑因素是:

    • 每个文件或文件夹名称最多可以使用 255 个 16 位 Unicode 字符,如 Technote 1150 的 HFS Plus Names 部分所述。
    • 基本级别的文件系统使用 Unicode v2.0(这是固定的)并且字符串必须以完全分解的规范顺序存储。这排除了某些“等价形式”的使用——即它们必须转换为分解形式。 Technote 1150 的Unicode Subtleties 部分对此进行了详细描述。本部分详细介绍了其他问题,应仔细阅读。
    • 可以在此Decomposition Table 中找到非法字符列表。
    • 冒号“:”用作目录分隔符,在文件和文件夹名称中无效。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 2013-12-04
      • 1970-01-01
      相关资源
      最近更新 更多