【发布时间】:2019-10-02 15:42:18
【问题描述】:
我想将 Android 中的字符串编码为 UTF-8。例如这个字符串:
Grüne Ähren beißen Flöhe
到
Grüne Ãhren beiÃen Flöhe
但无论我做什么,我都会将 ü 编码为 ü 或 ü 编码为 %C3%BC(在线通常称为“原始 URL 编码”)。
找到转换为 byte[] 或 URI.toASCIIString() 的解决方案。但它们都不适合我。
更新
我正在加入 eBay 合作伙伴网络,并尝试将搜索词连接到我的合作伙伴网址。 eBay 的人必须使用错误的字符集,因为 UTF-8 URL 编码的字符串不起作用。
使用 UTF-8 URL 编码的搜索词
(Grüne Ähren beißen Flöhe
到
Gr%C3%BCne%20%C3%84hren%20bei%C3%9Fen%20Fl%C3%B6he)
在 eBay 搜索框中出现此结果:
如果我使用 ISO_8859_1 对搜索词进行编码,它可以工作 (Grüne Ãhren beiÃen Flöhe):
非常感谢社区
【问题讨论】:
-
您需要了解将
Grüne Ähren beißen Flöhe编码为utf-8 仍将是Grüne Ähren beißen Flöhe。假设底层字节会有所不同,也就是说,如果有问题的文本存储为文本字节。 -
我认为你不明白这里发生了什么。 UTF-8 有自己的方式将字符编码为字节。如果您使用 UTF8 将
ö转换为它的 2 字节表示 (C3 B6) 并且 也使用 UTF8 将其转换回字符,则ö仍然是ö。如果您将其转换为 UTF8 字节但使用 ISO-8859-1 将其转换回来,您将获得所需的ö,这通常是您不想要的。 -
感谢@kumesana 的评论。完全有道理。我被在线转换器误导,告诉我这种编码是 UTF-8(例如link。但问题仍然存在。如何将元音变音等转换为这些神秘字符?
-
@f1sh 已经提到的是您通常不希望这种情况发生。请问你打算做什么?模拟读取错误编码的文本数据?
-
听起来您遇到了一个配置了错误字符集的终端(很可能是在 Windows 上),并且在打印 UTF-8 时您看到了不正确的特殊字符表示。解决方法是正确配置终端。
标签: java android encoding utf-8 urlencode