gpt4 book ai didi

java - CSV 中的字符编码 UTF 和 ISO-8859-1

转载 作者:行者123 更新时间:2023-12-04 06:39:53 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:




9年前关闭。




Possible Duplicate:
How to add a UTF-8 BOM in java



我的 oracle 数据库有一个 UTF8 字符集。
我有一个 Java 存储过程,它从表中获取记录并创建一个 csv 文件。
BLOB retBLOB = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION);
retBLOB.open(BLOB.MODE_READWRITE);
OutputStream bOut = retBLOB.setBinaryStream(0L);
ZipOutputStream zipOut = new ZipOutputStream(bOut);
PrintStream out = new PrintStream(zipOut,false,"UTF-8");

如果我使用上面的代码,德语字符(从表中获取)在 csv 中会变成乱码。但是,如果我更改编码以使用 ISO-8859-1 ,然后我可以在 csv 文件中正确地看到德语字符。
PrintStream out = new PrintStream(zipOut,false,"ISO-8859-1");

我读过一些帖子说我们应该使用 UTF8,因为它是安全的,并且还会正确编码其他语言(中文等), ISO-8859-1将无法这样做。

请建议我应该使用哪种编码。 (将来我们很有可能在表中存储中文/日文单词。)

最佳答案

您目前只讨论本质上是双向的流程的一部分。

将某些内容编码为字节仅在某些其他过程出现并在稍后将其解码回文本的意义上才真正相关。当然,两个进程都需要使用相同的字符集,否则解码将失败。

所以在我看来,采用 BLOB 的过程 数据库和 CSV 文件,假设字节是文本的 ISO-8859-1 编码。因此,如果您将它们存储为 UTF-8,解码会困惑(尽管基本 ASCII 字符在两者中具有相同的字节表示,这就是它们仍然可以正确解码的原因)。

UTF-8 几乎在所有情况下都可以使用的良好字符集,但它并不足以克服不可改变的定律,即解码时必须使用与编码时相同的字符集。因此,您可以更改 CSV-creator 以使用 UTF-8 进行解码,否则您将不得不继续使用 ISO-8859-1 进行编码。

关于java - CSV 中的字符编码 UTF 和 ISO-8859-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4385749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com