给定一个字节数组表示某些未知编码中的文本(通常是UTF-8或ISO-8859-1,但不一定如此),获得最可能使用的编码(在Java中)的最佳方法是什么?
值得注意:
在我试图帮助的网站上,用户可以在浏览器中输入一个URL,如下面的汉字,
http://localhost:8080?a=??
Run Code Online (Sandbox Code Playgroud)
在服务器上,我们得到
GET /a=%E6%B5%8B%E8%AF%95 HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
如您所见,它是UTF-8编码,然后是URL编码.我们可以通过在Tomcat中将编码设置为UTF-8来正确处理.
但是,有时我们在某些浏览器上获得Latin1编码,
http://localhost:8080?a=ß
Run Code Online (Sandbox Code Playgroud)
变成
GET /a=%DF HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
无论如何在Tomcat中正确处理这个问题?看起来服务器必须做一些智能猜测.我们不希望100%正确处理Latin1,但是假设一切都是UTF-8,那么任何东西都比我们现在做的要好.
服务器是Tomcat 5.5.支持的浏览器是iPhone 6 +,Firefox 2+和iPhone上的Safari.
如何制作一个cyrillic字符串的正则表达式,我想以某种方式使用它:
String.replaceAll("?????????","")
当然它不起作用.我该怎么办才能让它发挥作用?
好的,我看到该方法有效,但它对我不起作用.我如何检查,为什么方法不执行?
...
嗯,我试着使用s1 = s1.replaceAll("[\\p{InCyrillic}]", "");我通过套接字的字符串.它的效果很好,所有的西里尔字母都消失了,包括这个词"???????",但是如果我尝试 s1=s1.replaceAll("???????","")什么也没发生.
但是s1=s1.replaceAll("???????","")对于在此程序中定义的静态字符串,方法在同一程序中工作.我想这个问题可能是因为错误的字符集,但我仍然无法理解我做错了什么.字符串的字符集是windows-1251.我尝试在程序中使用charset进行实验(现在是jsp),使用方法
System.setProperty("file.encoding", "windows-1251");
response.setCharacterEncoding("windows-1251");
Run Code Online (Sandbox Code Playgroud)
尝试将字符串从一个字符集转换为另一个字符集.没有任何改变