iOS 写入 CSV 文件:使用哪种编码
iOS write to CSV file: which encoding to use
在我的 iOS 应用程序中,我有一个将数据写入 CSV 文件的功能。在大多数情况下,这适用于以下情况:
[csvString writeToFile: filePath atomically:YES encoding: NSUTF8StringEncoding error:&error];
我最近收到一位日本用户的电子邮件,说导出的 CSV 文件有奇怪的符号而不是日文字符。所以我改用 NSUTF16StringEncoding,它似乎也适用于日文字符。
所以问题是:使用 NSUTF16StringEncoding 是更好,还是这样做有什么缺点?似乎我看到的其他写入 CSV 文件的示例(包括 CHCSVParser)使用
NSUTF8StringEncoding,所以我不确定更喜欢哪一个。
谢谢。
没有 "better" 编码。
UTF-8 每个字符使用可变数量的字节,从 1 到 4。UTF-16 始终为每个字符使用 2 个字节。什么是最好的,完全取决于您和您的企业。理论上,如果您的用户主要位于亚洲并且主要使用非 ASCII 字符,则以 UTF-16 编码的文件会更小。如果您的用户主要生活在西方世界并使用基于拉丁字母的字母表,那么使用 UTF-8 会使每个文件小 50%。
我相信您的问题不在于编码的选择,而在于呈现方式。文本编辑器无法猜测文件的编码,因此您的日语用户可能使用默认为 UTF-16 的文本编辑器,因此无法正确表示 UTF-8 字符序列。
这个问题的解决方案是使用 BOM 序列,按照这个 SO 答案:(简而言之:只需在文件开头添加这 3 个字节以告诉编辑器使用什么编码)
在我的 iOS 应用程序中,我有一个将数据写入 CSV 文件的功能。在大多数情况下,这适用于以下情况:
[csvString writeToFile: filePath atomically:YES encoding: NSUTF8StringEncoding error:&error];
我最近收到一位日本用户的电子邮件,说导出的 CSV 文件有奇怪的符号而不是日文字符。所以我改用 NSUTF16StringEncoding,它似乎也适用于日文字符。
所以问题是:使用 NSUTF16StringEncoding 是更好,还是这样做有什么缺点?似乎我看到的其他写入 CSV 文件的示例(包括 CHCSVParser)使用 NSUTF8StringEncoding,所以我不确定更喜欢哪一个。
谢谢。
没有 "better" 编码。
UTF-8 每个字符使用可变数量的字节,从 1 到 4。UTF-16 始终为每个字符使用 2 个字节。什么是最好的,完全取决于您和您的企业。理论上,如果您的用户主要位于亚洲并且主要使用非 ASCII 字符,则以 UTF-16 编码的文件会更小。如果您的用户主要生活在西方世界并使用基于拉丁字母的字母表,那么使用 UTF-8 会使每个文件小 50%。
我相信您的问题不在于编码的选择,而在于呈现方式。文本编辑器无法猜测文件的编码,因此您的日语用户可能使用默认为 UTF-16 的文本编辑器,因此无法正确表示 UTF-8 字符序列。 这个问题的解决方案是使用 BOM 序列,按照这个 SO 答案:(简而言之:只需在文件开头添加这 3 个字节以告诉编辑器使用什么编码)