Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 编码为UTF-8。编码字符,例如&xF6;至ö;_Java_Android_Encoding_Utf 8_Urlencode - Fatal编程技术网

Java 编码为UTF-8。编码字符,例如&xF6;至ö;

Java 编码为UTF-8。编码字符,例如&xF6;至ö;,java,android,encoding,utf-8,urlencode,Java,Android,Encoding,Utf 8,Urlencode,我想将Android中的字符串编码为UTF-8。例如,此字符串: Grüne Ähren beißen Flöhe 到 但无论我做什么,我都会将ütoü或üto%C3%BC(在线上通常称为“原始URL编码”) 找到了转换为字节[]或URI.toASCIIString()的解决方案。但他们中没有一个为我工作 更新 我正在参与易趣合作伙伴网络,并尝试将搜索词添加到我的合作伙伴url。 eBay用户必须使用错误的字符集,因为UTF-8 URL编码字符串不起作用 具有UTF-8 URL编码的搜索词 (

我想将Android中的字符串编码为UTF-8。例如,此字符串:

Grüne Ähren beißen Flöhe

但无论我做什么,我都会将ütoü或üto%C3%BC(在线上通常称为“原始URL编码”)

找到了转换为字节[]或URI.toASCIIString()的解决方案。但他们中没有一个为我工作

更新

我正在参与易趣合作伙伴网络,并尝试将搜索词添加到我的合作伙伴url。 eBay用户必须使用错误的字符集,因为UTF-8 URL编码字符串不起作用

具有UTF-8 URL编码的搜索词

(格吕内·赫伦·贝伦·弗勒)

Gr%C3%BCne%20%C3%84hren%20bei%C3%9Fen%20Fl%C3%B6he)

在易趣搜索框中显示此结果:

如果我用ISO8859_1编码我的搜索词,它会起作用(GrüneÃhren beiÃen FlÃÃhe):


非常感谢社区

您真正想要的是根据
UTF-8
将字符串转换为其字节表示形式,并使用不同的字符集解释这些字节,例如
ISO-8859-1

这通常是许多问题的原因。您想要故意做大多数开发人员不正确的事情(或者他们只是忽略了字符集的问题)

由于您只需要此功能即可工作,请使用以下代码:

byte[] bytes = "Grüne Ähren beißen Flöhe".getBytes("UTF-8");
String result = new String(bytes, "ISO-8859-1");

在工作中看到它。

你需要理解,编码到utf-8的
GrüneÄhren beißen Flöhe
仍然是
GrüneÄhren beißen Flöhe
。假设底层字节会不同,也就是说,如果所讨论的文本存储为文本字节,我想你不明白这里发生了什么。UTF-8有自己的方式将字符编码为字节。如果使用UTF8将
ö
转换为其2字节表示形式(C3 B6),并使用UTF8将其转换回字符,则
ö仍然是
ö
。如果您将其转换为UTF8字节,但使用ISO-8859-1将其转换回来,您将获得所需的
Ã
,这通常是您不想要的。感谢@kumesana的评论。完全有道理。在线转换器告诉我这种编码是UTF-8,这误导了我(例如,但问题仍然存在。如何将Umlauts等转换为这些神秘字符?@f1sh已经提到的是,您通常不希望发生这种情况。请问您打算做什么?模拟使用错误编码读取的文本数据?听起来您遇到了一个终端(很可能是在Windows上)这是用错误的字符集配置的,当打印UTF-8时,您会看到特殊字符的错误表示。解决方案是正确配置终端。当然,结果是垃圾。并且依赖ISO-8891-1来表示特殊字符,这在ISO-8891-13中是不同的。@JoopEggen技术上,OP逐字询问如何获得垃圾。@kumesana是的,我不是想批评,只是再一次,结果没有用处,只是看看读取UTF-8的错误是否源于ISO-8859-1的读取。@f1sh非常感谢您对我问题的澄清。将字节编码为字符是一件事。Base64是一种非常常见的错误方法。它也很容易记录。不幸的是,有些人出于同样的目的使用ISO 8859-1编码的反面。我称之为Base256编码。它的最大问题是,它经常与纯文本混淆,或者被视为mojibake,而且几乎没有记录它是什么。
byte[] bytes = "Grüne Ähren beißen Flöhe".getBytes("UTF-8");
String result = new String(bytes, "ISO-8859-1");