2009-09-02 83 views
2

我真的被java的字符串编码阻止。 它有很多自动转换。我找不到正规的。 任何人有好主意? 例如: 在JSP页面中,也有这样的链接如何处理java中的字符串编码?

http://localhost:8080/helloworld/hello?world=凹ㄉ 

然后,我们需要处理它,所以我们这样做:

String a = new String(request.getParameter("world").toString().getBytes("ISO-8859-1"), 
         "UTF-8"); 
a = "http://localhost/" + a; 

当我调试它,我发现了一个是对的。

然后我将它传递给会话对象: request.getSession()。setAttribute(“hello”,a);

后来在编码为“Big5”的jsp页面中,我尝试获取属性并显示, 而且我发现字符“凹陷”已损坏。

我该如何解决这个问题?

回答

12

这不是你在字符集之间转换的方式。你需要担心的是这一部分:

request.getParameter("world").toString().getBytes("ISO-8859-1") 

一旦你把它作为一个字符串,它在内部为16位Unicode存储。以字节的形式获取它,然后告诉java将这些字节视为UTF-8,这样做不会有什么好处。

如果您发现它很好,那只是一个巧合。一旦你调用getParameter(“world”)。toString(),你就有了你的unicode字符串。进一步的解码和编码只会破坏某些字符,只是碰巧不会破坏你的。

问题是如何让该属性稍后显示?你说jsp页面的编码不是unicode,而是Big5,所以你怎么做才能将该字符串从属性映射中取出并放在该页面上?这是问题的可能来源。鉴于对如何处理获取参数中的字符转换的误解,很可能该Big5页面上也存在一些错误。

顺便说一下,你真的需要使用Big5吗? UTF-16会工作吗(如果不是UTF-8)?这当然可以消除一些头痛。

+0

是的,我需要使用大5。 – MemoryLeak 2009-09-02 03:54:41

-1

下面的代码将工作

String a = new String(request.getParameter("world").toString().getBytes("ISO-8859-1"), 
         "UTF-16");