我编写了一个Java程序来生成基于从k3b翻录的CD的m3u文件,该文件几乎保留了艺术家,专辑和曲目名称中的特殊字符编码。然后我将这些m3u文件放在服务器上并生成一个GWT Web应用程序,其中m3u文件名是HTML锚标记的目标。对于99%以上的案例,这一切都很完美。在少数情况下,特殊字符会导致链接失败。
一个失败的例子是Movits!专辑Äppelknyckarjazz(注意由URI构造函数编码的第一个字符为%C3%84)。由于客户端是GWT,视图源不显示链接,:-(但是当悬停在链接上时,Firefox显示正确解码的URL。当点击链接时,Firefox失败:“...Ôppelknyckarjazz.m3u是在这台服务器上找不到“就好像不同的角色编码方案在起作用,但坦率地说,我的大脑在试图解开这个级别的难题时会受到伤害。
所以真的有两个问题:
1)我的问题是编码方案问题吗?
2)假设是,我如何在应用程序的各个部分(Java m3u生成器,GWT客户端,Firefox浏览器,Apache Web服务器)之间保持一致性。
答案 0 :(得分:3)
String result = java.net.URLEncoder.encode("Äppelknyckarjazz", "UTF-8");
我认为这是一个适合你的解决方案。
答案 1 :(得分:0)
Ä可编码为%C3%84(UTF8)或%C4(Latin1)。听起来你正在使用Latin11和UTF8的混合物。您需要确保在所有系统中使用相同的编码。
在极少数情况下,您无法控制编码,请参阅我对此问题的回答,
How to determine if a String contains invalid encoded characters
答案 2 :(得分:0)
首先,您必须在HTML页面上声明一个字符集。最好的是UTF-8。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
然后,您应该将您的网络服务器配置为将来自客户端的请求解释为UTF-8。使用tomcat时,在Connector-tag上设置URIEncoding参数:
<Connector port="8080" protocol="HTTP/1.1" URIEncoding="UTF-8" />