【发布时间】:2018-07-04 14:16:08
【问题描述】:
我们遇到了 zip 文件中的文件编码问题。 我们正在使用 ionic zip 压缩和解压缩档案。 我们位于丹麦,所以我们经常有文件名中包含 æ、ø 或 å 的文件。
当用户使用 windows 内置工具压缩文件时,我发现它使用的是 IBM437 编码,当我们在其中包含 'ø' / 'Ø' 的文件时,这只是给出了一些时髦的结果。我用以下代码解决了这个问题:
public static string IBM437Encode(this string text)
{
return text.Replace('ø', '¢').Replace('Ø', '¥');
}
public static string IBM437Decode(this string text)
{
return text.Replace('¢', 'ø').Replace('¥', 'Ø');
}
这已经运行了一段时间,一切都很好。
但是,因为总是有一个but,所以我们没有尝试使用mac osx中默认工具压缩的文件。 所以现在我们遇到了一个新问题.. 使用 æ、ø 和 å 时,编码为 UTF-8! 所以如果我知道 zip 压缩在哪里,我就可以让它工作,但是有没有简单的方法来检测或规范化 zip 中的编码?
【问题讨论】:
-
它不在 zip 对象的属性中的任何位置?
-
注意,检测编码总是一件棘手的事情,但是 UTF8 有严格的规则,你可以以一种在解码时会抛出异常而失败的方式初始化一个 UTF8Encoding 对象失败,所以如果你对 zip 中的所有文件名运行它,它可以相当准确地检测名称 not 是 UTF-8。
-
感谢@Nyerguds 在您发表评论后我找到了this,它描述了我如何尝试确定字符串的编码..
-
如果你愿意,你可以把你的评论写成答案,这样我就可以把它标记为已回答..
-
完成,并添加了一些额外内容。不过,我确实希望你能可靠地获得这些文件名的原始字节表示。