gpt4 book ai didi

java - 即使在使用 UTF8 之后,处理 InputStreamReader 时也不会保留字符编码

转载 作者:行者123 更新时间:2023-12-02 18:42:30 26 4
gpt4 key购买 nike

有数据:

batiment:Kube D
etage:4ème
description:some_description

我想通过InputStreamReader获取这些数据:

SharedByteArrayInputStream sbais = (SharedByteArrayInputStream) content;
Reader reader = new InputStreamReader(sbais, Charset.forName("UTF8"));
int size = sbais.available();
char[] theChars = new char[size];
int data = reader.read();
int i = 0;
while (data != -1) {
theChars[i] = (char) data;
i++;
data = reader.read();
}
String parse = new String(theChars);
String[] parties = parse.split("Content-Transfer-Encoding: quoted-printable");
String partie = (parties[1]).trim();
parties = partie.split("\\R");
String ret = "";
for(String ligne : parties) {
if (ligne == null || ligne.trim().equals(""))
break;
ret = ret.concat(ligne).concat(System.lineSeparator());
}
return ret;

在运行时,数据 4ème 会转换为 4=E8me

那么到底出了什么问题呢?

编辑:

这是内容的标题:

--_008_DB6P190MB0166B6F4DE5E31397B4A7B558C3C9DB6P190MB0166EURP_
Content-Type: multipart/alternative;
boundary="_000_DB6P190MB0166B6F4DE5E31397B4A7B558C3C9DB6P190MB0166EURP_"

--_000_DB6P190MB0166B6F4DE5E31397B4A7B558C3C9DB6P190MB0166EURP_
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

batiment:KUBE D
etage:4=E8me
description:andrana

Cordialement,

...

最佳答案

我们可以看到您忽略了字符串 Content-Transfer-Encoding: Quoted-printable 之前内容中的所有内容。

这意味着您的初始内容实际上是 4=E8me,它对应于 ISO-8859-1 字符串,用 quoted-printable 编码。 .

如果你想将其转换为4ème,则必须对其进行解码。

没有任何开箱即用的东西,但是 this答案会给你一些可以使用的库的想法。

例如使用 Apache Common Codec ,它会是这样的:

    partie = new QuotedPrintableCodec(StandardCharsets.ISO_8859_1).decode(partie);

关于java - 即使在使用 UTF8 之后,处理 InputStreamReader 时也不会保留字符编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67816694/

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