有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

请求中的java字符编码。getRemoteUser()

每个请求都通过Microsoft IIS和连接到Tomcat的AJP13连接器发送。有些用户名包含德语特殊字符。如果用户名是“Kloß”,则request.getRemoteUser()返回“KloÃ?”。在Tomcats localhost_access_日志中,用户名正确记录为“Kloß”

如何将request.getRemoteUser()的返回值转换为UTF-8字符串

我试过但没有成功:

String s1 = request.getRemoteUser()
String s2 = org.apache.commons.codec.binary.StringUtils.newStringUtf8(request.getRemoteUser().getBytes())

共 (1) 个答案

  1. # 1 楼答案

    我想你需要找出getRemoteUser()的编码结果

    在纯UTF-8系统上,我执行了以下操作:

        String name = "Kloß";
        System.out.printf("%x%n", new BigInteger(1, name.getBytes()));
    

    哪本书

        4b6c6fc39f
      /*K l o ß   */
    

    c39f馈送到文件格式的搜索中。信息我们发现它是一个LATIN SMALL LETTER SHARP S在它的utf-8十六进制表示中

    因此,用request.getRemoteUser()执行上面的printf,并尝试找出ß所在的字符集。如果请求来自windows机器,我猜是“CP1252”