byte[] data = htmlResponse.getAllData();
String html = new String(bytes); // Don't ever call this constructor.
String html = new String(bytes, "IBM-852"); // Correct!
byte[] data = htmlResponse.getAllData();
String html = new String(bytes, "IBM-852");
// replace the § symbol with nothing (i.e. remove it)
html = html.replace("§", "");
1条答案
按热度按时间eanckbw91#
unicode符号244是ô. ascii表从0到127,或多或少。
因此,本声明:
段落符号是什么(ascii:alt-244)
表示您感到困惑。没有ascii码。如果您的意思是unicode:244不是段落符号。如果你是指iso-8859-1:那一个也有ô 在现场。cp1252也是。麦克罗曼有ù. 我开始用完常用的编码,所以不管你有一个奇怪的变种我不知道。
ibm852和ibm850具有§, 但是在245点所以大概你误会了什么,这是ibm852,因为这太巧合了。
注意ibm850字符集来自dos时代。你是在和博物馆里的机器说话吗?那是。。一个该死的过时的角色!
你所拥有的是文本,编码为字节。那是。。正常情况下,计算机会处理字节。然而,任何时候你把你的字节解释成字符,你必须告诉计算机怎么做。如果你不这样做,计算机会猜测,你可以放心地假设计算机会猜错,把你搞砸:它会在你的机器上工作,通过你的测试,然后在运行时失败。解决办法是永远不要让电脑猜。每当字节转换为字符或反之亦然时,总是指定一个字符集,或确保显式地记录您使用的方法来选择一个已定义的字符集。
例如,如果Web服务器的响应是字节数组,并且要将其转换为字符串,则:
如果您是从html获取这些内容,那么字符集将出现在响应头中。它应该为你解决这个问题;显然不是这样,听起来像是有问题的web服务器被窃听,并发送错误的字符集数据。或者你的代码被窃听了,你自己把编码转换搞砸了。
它只是一个符号,java中的字符串或多或少都是unicode。一旦你正确地阅读了它(我敢打赌你没有,这是问题的一部分),如果你想删除它,这是微不足道的:
注意:做字符集最简单的方法就是用utf-8编码所有的东西。尤其是网络。如果你能和网站的所有者或者为其编写软件的人交谈,你应该告诉他们这样做。