Java 从internet获取的文本的UTF8转换

Java 从internet获取的文本的UTF8转换,java,utf-8,Java,Utf 8,ElasticSearch是一个只接受UTF8格式数据的搜索服务器 当我尝试给ElasticSearch以下文本 可能会减少报告工作量的小型企业包括年营业额低于440000英镑、净资产低于220000英镑和员工少于10人的企业。” 通过我的java应用程序-基本上,我的java应用程序从网页中获取此信息,并将其提供给elasticSearch。它无法理解,并且失败。在过滤下面的代码后- byte bytes[] = s.getBytes("ISO-8859-1"); s = new String

ElasticSearch是一个只接受UTF8格式数据的搜索服务器

当我尝试给ElasticSearch以下文本

可能会减少报告工作量的小型企业包括年营业额低于440000英镑、净资产低于220000英镑和员工少于10人的企业。”

通过我的java应用程序-基本上,我的java应用程序从网页中获取此信息,并将其提供给elasticSearch。它无法理解,并且失败。在过滤下面的代码后-

byte bytes[] = s.getBytes("ISO-8859-1");
s = new String(bytes, "UTF-8");
此处将
转换为


但是,当我使用bash将它复制到我的主目录中的文件时,它会正常运行。任何指针都会有帮助。

您在
字节中有ISO-8895-1八位字节,然后您告诉
字符串
解码,就像它是UTF-8一样。当它这样做时,它不会识别非法的0xA3序列,并用替换字符替换它演员


要做到这一点,您必须使用它使用的编码构造字符串,然后将其转换为所需的编码。请参阅。

UTF-8比人们想象的要简单。在字符串中,所有内容都是unicode字符。 字节/字符串转换如下所示。 (注Cp1252或Windows-1252是ISO-8859-1的Windows Latin1扩展;更好地使用 那一个。)

要了解为什么Cp1252比ISO-8859-1更合适:

字符串s是一系列基本上独立于任何字符编码的字符(好的,不是完全独立的,但现在已经足够接近我们的需要)。当您将数据加载到字符串中时,数据中的任何编码都已被解码。解码是使用系统默认编码或(这实际上总是一个错误,永远不要使用系统默认编码,相信我,我在处理错误默认编码相关的错误方面有超过10年的经验)或加载数据时明确指定的编码

当您为字符串调用getBytes(“ISO-8859-1”)时,您请求根据ISO-8859-1编码将字符串编码为字节

从字节数组创建字符串时,需要指定表示字节数组中字符的编码。从UTF-8编码的字节数组创建字符串(在ISO-8859-1编码的正上方,这是您的错误)

您要做的是:

byte bytes[] = s.getBytes("UTF-8");
s = new String(bytes, "UTF-8");

@VineethMohan为什么要使用
getBytes(“ISO-8859-1”)
?我认为您需要使用UTF-8?我需要识别基本编码。我假设文本编码为ISO-8859-1页面是否声明编码?实际字节是什么样子的?如果神秘字符显示为0xA3,那么它是8859-1或类似的;在UTF8中,它是0xC2 0xA3是否有办法将任何字符移动到UTF8,类似于逃避可能重复的
byte bytes[] = s.getBytes("UTF-8");
s = new String(bytes, "UTF-8");