MacRoman vs UTF-8

时间:2012-07-06 18:21:03

标签: java utf-8 jasypt apache-commons-io mac-roman

我尝试从源中提取字节数据,对其进行加密,然后将其存储在文件系统中。

对于加密,我使用 jasypt BasicTextEncryptor 类。为了存储到文件系统,我正在使用 Apache的Commons IOUtils 类。

必要时,这些文件将被解密,然后发送到用户的浏览器。此系统适用于我的本地计算机,默认字符集为 MacRoman ,但在默认字符集为 UTF-8 的服务器上失败。

当我在流程的每个阶段明确设置编码以使用 MacRoman 时,它也可以在服务器上运行,但我对这样做持怀疑态度,因为其余代码使用 UTF8

有没有办法可以在不转换为MacRoman的情况下处理代码?

2 个答案:

答案 0 :(得分:1)

你应该在任何地方使用UTF8。

只要您在操作的每一端使用相同的编码(并且只要编码可以处理您需要的所有字符),您就可以了。

答案 1 :(得分:1)

在您对其他答案的评论中,您声称自己没有使用编码,但这是不可能的。您正在使用BasicTextEncryptor类,根据this documentation,它只适用于字符串和字符数组。这意味着,在某些时候,您将从编码不可知的字节数组转换为特定于编码的String或char数组。这意味着你在某个地方依赖编码,无论你是否意识到这一点。您需要跟踪转换发生的位置并确保其具有正确的编码。

您的问题指出,“当我在流程的每个阶段明确设置编码时”,因此您需要知道它在数据库中的编码方式。如果这没有意义,请继续阅读。

你也可能只是试图加密你从数据库中获取的文件,而你不关心字符串表示;你想把它当作普通字节,而不是文本。在这种情况下,BasicTextEncrypter(“用于轻松执行文本的正常强度加密的实用程序类。”)不适合此任务。它加密字符串。 BasicBinaryEncryptor(“用于轻松执行二进制文件的正常强度加密的实用程序类(字节数组)。”)是您所需要的。