CS编程中,经常会遇到汉字编码问题。
之所以会这样,就是因为客户端与服务端两边的编码方式不统一,我们知道在网络通信中,字符串都会通过一定的编码方式转化成字节流发送,服务器在收到字节流后会根据一定的规则来解码出字符串,由于双方的不统一,解码与编码不一致就出现了汉字乱码的问题。
为解决这个问题,首先自己能控制的转码尽量自己控制,比如java servlet中HttpServletResponse.getOutputStream(),这个流可以传递字节流,也可以经过包装后传递一个字符串,当然传递字符串会由函数自己先转换成字节流再进行传递,这种情况下我们尽量自己控制编码过程,即自己来获得字节流,字节流获得方法String.getBytes("utf-8") ,这样传递至少我们能确定编码方式,当然就控制了汉字乱码。虽然HttpServletResponse.setCharacterSet也能设置编码方式,但这个方法几乎没有解决过我的乱码问题。
如果自己控制不了编码,目前遇到最常见的一种错误:大家在两端都会把编码设成utf-8,但汉字依然乱码。这时候一般原因是编码的时候正确,而解码的时候却采用ISO-8859-1,因此我们就需要将乱码的汉字重新以ISO-8859-1方式编码,再用utf-8解码。java中的方法为 String str=new String(str.getBytes("ISO-8859-1"),"utf-8");当然这种方式需要你知道两端的编码方式。
至于其它情况,本人能力有限,如大家有何高见,不吝赐教。共勉。。。。。。