Bundle.main.path(forResource: 对于名称中带有重音字符的文件始终为 nil...这是一个错误吗?
Bundle.main.path(forResource: is always nil for files with accented chars in the name... is this a bug?
是的,我已将文件包含在目标的捆绑包中。
但是这一行
let path = Bundle.main.path(forResource: fileName, ofType: "wav")
如果 fileName
文件名中有重音字符, 将始终为 nil,例如
autenticaçãoemcartório
armação
有办法解决吗?
你能确认这是一个错误吗?
我希望您的文件名没有以相同的 Unicode 格式编码。例如,LOWERCASE SMALL LETTER O + COMBINING ACUTE ACCENT 与 LATIN SMALL LETTER O WITH ACUTE 不同,即使它们看起来相同。根据您的文件名的创建方式,Bundle 对待相等的方式可能存在不“相等”的不匹配。 (它们 可能 在 Swift.String 对待平等的方式上是平等的,但在 Bundle 对待平等的方式上仍然不平等。)
请注意,设备上的文件系统与模拟器上的文件系统不同,因此在一个地方工作的东西可能在另一个地方不工作。
要探索这一点,首先使用 FileManager 枚举目录中的文件名。然后检查他们的 unicodeScalars
属性 并将其与您要查找的字符串进行比较。
特别怀疑不是在 Apple 平台上创建和命名的文件,因为不同的平台可能有不同的默认 non-ASCII 字符编码方式。
根据您的评论,您的文件名未采用 UTF-8 编码。它们看起来像 Latin1(可能创建于 Windows?)
是的,我已将文件包含在目标的捆绑包中。
但是这一行
let path = Bundle.main.path(forResource: fileName, ofType: "wav")
如果 fileName
文件名中有重音字符,将始终为 nil,例如
autenticaçãoemcartório
armação
有办法解决吗?
你能确认这是一个错误吗?
我希望您的文件名没有以相同的 Unicode 格式编码。例如,LOWERCASE SMALL LETTER O + COMBINING ACUTE ACCENT 与 LATIN SMALL LETTER O WITH ACUTE 不同,即使它们看起来相同。根据您的文件名的创建方式,Bundle 对待相等的方式可能存在不“相等”的不匹配。 (它们 可能 在 Swift.String 对待平等的方式上是平等的,但在 Bundle 对待平等的方式上仍然不平等。)
请注意,设备上的文件系统与模拟器上的文件系统不同,因此在一个地方工作的东西可能在另一个地方不工作。
要探索这一点,首先使用 FileManager 枚举目录中的文件名。然后检查他们的 unicodeScalars
属性 并将其与您要查找的字符串进行比较。
特别怀疑不是在 Apple 平台上创建和命名的文件,因为不同的平台可能有不同的默认 non-ASCII 字符编码方式。
根据您的评论,您的文件名未采用 UTF-8 编码。它们看起来像 Latin1(可能创建于 Windows?)