如何使用java转换特殊字符?
我有这样的字符串:如何使用java转换特殊字符?,java,special-characters,htmlspecialchars,Java,Special Characters,Htmlspecialchars,我有这样的字符串: Avery® Laser & Inkjet Self-Adhesive 我需要把它们转换成 Avery Laser & Inkjet Self-Adhesive. 也就是说,删除特殊字符并将html特殊字符转换为常规字符。您可以使用project中的类。也许您可以使用如下内容: yourTxt = yourTxt.replaceAll("&", "&"); public String replaceAcutesHTML(
Avery® Laser & Inkjet Self-Adhesive
我需要把它们转换成
Avery Laser & Inkjet Self-Adhesive.
也就是说,删除特殊字符并将html特殊字符转换为常规字符。您可以使用project中的类。也许您可以使用如下内容:
yourTxt = yourTxt.replaceAll("&", "&");
public String replaceAcutesHTML(String str) {
str = str.replaceAll("á","á");
str = str.replaceAll("é","é");
str = str.replaceAll("í","í");
str = str.replaceAll("ó","ó");
str = str.replaceAll("ú","ú");
str = str.replaceAll("Á","Á");
str = str.replaceAll("É","É");
str = str.replaceAll("Í","Í");
str = str.replaceAll("Ó","Ó");
str = str.replaceAll("Ú","Ú");
str = str.replaceAll("ñ","ñ");
str = str.replaceAll("Ñ","Ñ");
return str;
在某个项目中,我做了如下工作:
yourTxt = yourTxt.replaceAll("&", "&");
public String replaceAcutesHTML(String str) {
str = str.replaceAll("á","á");
str = str.replaceAll("é","é");
str = str.replaceAll("í","í");
str = str.replaceAll("ó","ó");
str = str.replaceAll("ú","ú");
str = str.replaceAll("Á","Á");
str = str.replaceAll("É","É");
str = str.replaceAll("Í","Í");
str = str.replaceAll("Ó","Ó");
str = str.replaceAll("Ú","Ú");
str = str.replaceAll("ñ","ñ");
str = str.replaceAll("Ñ","Ñ");
return str;
}
…产生
Avery Laser & Inkjet Self-Adhesive
Avery激光与喷墨自粘
(没有您示例中的尾随点,但原始版本中没有尾随点;)
也就是说,这看起来更像是对解决方案的请求,而不是对解决方案的请求。如果您详细说明功能需求和/或该字符串的来源,我们可能能够提供正确的解决方案。
即
看起来像是由于使用错误的编码来读取中的字符串和&
看起来是由于使用基于文本的解析器而不是成熟的HTML解析器读取字符串造成的。如果您想模拟php函数htmlspecialchars\u decode使用php函数get\u HTML\u translation\u table()转储表,然后使用java代码,如
static Hashtable html_specialchars_table = new Hashtable();
static {
html_specialchars_table.put("<","<");
html_specialchars_table.put(">",">");
html_specialchars_table.put("&","&");
}
static String htmlspecialchars_decode_ENT_NOQUOTES(String s){
Enumeration en = html_specialchars_table.keys();
while(en.hasMoreElements()){
String key = (String)en.nextElement();
String val = (String)html_specialchars_table.get(key);
s = s.replaceAll(key, val);
}
return s;
}
static Hashtable html_specialchars_table=new Hashtable();
静止的{
html_specialchars_table.put(“,”);
html_specialchars_table.put(“&;”、“&”);
}
静态字符串htmlspecialchars_decode_ENT_NOQUOTES(字符串s){
枚举en=html_specialchars_table.keys();
while(en.hasMoreElements()){
字符串键=(字符串)en.nextElement();
String val=(String)html_specialchars_table.get(key);
s=s.replaceAll(键,值);
}
返回s;
}
我很感兴趣的是,为什么要得到HTML编码的字符串。。。在我的“理想”应用程序中,程序员永远不应该。。。(只需将结果编码为html,但接收到它…永远不会)这是一个遗留代码,它将数据保存为我需要读取和转换的原始格式。如果有奇怪的字符。。。看起来它最初是一个UTF-8字符,被解码(读取)为ISO-8859-1(西方ISO)。。。举个例子。如果你有一个π,它在UTF-8中有2个字节,所以如果你在iso western中读取它,它会读取到奇怪的字符。如果是这种情况,并且您知道您编码的编码使用新字符串(byte[],encodingName)
和someString.getBytes(encodingName)
来获得好的字符。这意味着您需要取消HTML中每个占位符的每次出现,这是一个难题,特别是当有人已经为你写了它的时候。这会起作用,但这不是一个理想的方法。要做到这一点,您必须构建(并维护)一组要替换的所有特殊字符。在可能的情况下,使用现有库或编码器比手动替换要好。它也恰好更容易实现,而且不那么繁琐!是的,尾随点是我的打字错误)你说得对,这种字符串是基于文本的解析器读取html的结果。