java JSP解码字符串不等于普通字符串
我是新手,所以请耐心点。。。 我发现了一个JSP代码片段,它从标题信息中读取用户数据,并对其进行了一点更改(使其成为一个函数)。问题是,返回的字符串只是比较好:我做了家庭作业,意识到这一定是某种字符集问题,因为即使两个字符串长度不匹配,但我找不到解决方案。如何将它们转换为适当的格式
<%@ page import="sun.misc.BASE64Encoder" %>
<%@ page import="java.io.*" %>
<%!
public String matchuser(String inputUser,HttpServletRequest request,HttpServletResponse response) throws java.io.IOException
{
String auth = request.getHeader("Authorization");
String s = "";
String retval = "kakukk";
//no auth, request NTLM
if (auth == null) {
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM");
return "no auth";
}
//check what client sent
if (auth.startsWith("NTLM ")) {
//System.out.println(auth);
byte[] msg = new sun.misc.BASE64Decoder().decodeBuffer(auth.substring(5));
int off = 0, length, offset;
//############################
if (msg[8] == 1)
{
off = 18;
byte z = 0;
byte[] msg1 =
{(byte)'N', (byte)'T', (byte)'L', (byte)'M', (byte)'S',(byte)'S', (byte)'P',
z,(byte)2, z, z, z, z, z, z, z,
(byte)40, z, z, z, (byte)1, (byte)130, z, z,
z, (byte)2, (byte)2, (byte)2, z, z, z, z, //
z, z, z, z, z, z, z, z};
// send ntlm type2 msg
response.setStatus(response.SC_UNAUTHORIZED);
response.setHeader("WWW-Authenticate", "NTLM "
+ new sun.misc.BASE64Encoder().encodeBuffer(msg1).trim());
return "dunno msg[8]";
}
else if (msg[8] == 3)
{
off = 30;
length = msg[off+17]*256 + msg[off+16];
offset = msg[off+19]*256 + msg[off+8];
s = new String(msg, offset, length);
// print computer name // out.println(s + " ");
}
else
{
return "done";
}
length = msg[off+9]*256 + msg[off+8];
offset = msg[off+11]*256 + msg[off+10];
//############################
s = new String(msg, offset, length);
if(s.equals(inputUser))
{
return "match";
}
else
{
return "not match:-" + s + "- input:-" + inputUser+"-";
}
}
return "final";
}
%>
<%
String fnc = matchuser("u099511",request,response);
out.println(fnc);
%>
在最后几行中,我使用我的用户(u099511)调用函数。从表面上看,这两个字符串看起来是一样的,但它们不是,我无法比较它们:
not match:-u099511- input:-u099511-
我错过了什么? 非常感谢您的帮助
# 1 楼答案
好的,问题是返回的字符串是UTF16LE。不要问为什么,显然我们的服务管理系统使用这个。。。 无论如何,解决方案是将结果字符串声明为utf16le:
如果你像我一样是一个初学者,你可能想记住UTF16在默认情况下是UTF-16BE