Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google应用程序引擎-Java-阅读post请求时,特殊字符会被更改_Java_Google App Engine_Servlets_Utf 8_Character Encoding - Fatal编程技术网

Google应用程序引擎-Java-阅读post请求时,特殊字符会被更改

Google应用程序引擎-Java-阅读post请求时,特殊字符会被更改,java,google-app-engine,servlets,utf-8,character-encoding,Java,Google App Engine,Servlets,Utf 8,Character Encoding,我的谷歌应用引擎servlet处理post请求。 它试图获取XML字符串,但特殊字符被更改。 像å/ä/ö这样的瑞典字符被转换成:Ã¥ public String getXML(HttpServletRequest req){ String XML = ""; try { BufferedReader b = req.getReader(); StringBuffer xmlBuffer = new StringBuffer();

我的谷歌应用引擎servlet处理post请求。 它试图获取XML字符串,但特殊字符被更改。 像å/ä/ö这样的瑞典字符被转换成:Ã¥

public String getXML(HttpServletRequest req){
    String XML = "";
    try {
        BufferedReader b = req.getReader();
        StringBuffer xmlBuffer = new StringBuffer();
        while((XML = b.readLine()) != null) {  
               xmlBuffer.append(XML);  
        }
        XML = xmlBuffer.toString();
    } catch (IOException e) {
        //maybe later
    }
    return XML;
}
post数据始终是一个UTF-8的XML字符串,用于验证哈希

编辑问题:2013-12-05

new String(XML.getBytes(),"UTF-8")
您正在重新解释字符串的字节,从到
UTF-8

尝试在不进行任何显式转换的情况下读取请求,如下所示:

public String getXML(HttpServletRequest req){
    try {
        BufferedReader b = req.getReader();
        StringBuffer xmlBuffer = new StringBuffer();
        String XML;
        while((XML = b.readLine()) != null) {  
               xmlBuffer.append(XML);  
        }
        return xmlBuffer.toString();
    } catch (IOException e) {
        throw new RuntimeException(e);
    }
}
或使用:

getReader()
负责执行任何必要的字符转换,如

读取器根据主体上使用的字符编码来翻译字符数据

我设法(用谷歌)找到了答案。。最后

req.setCharacterEncoding("UTF-8");
public String getXML(HttpServletRequest req) throws IOException{    
    String input = null;
    if ((input = (String) req.getAttribute("com.xp.input")) == null) {
        StringBuilder buffer = new StringBuilder();
        BufferedReader reader = req.getReader();

        String line;
        while((line = reader.readLine()) != null){
            buffer.append(line);
        }
        input = buffer.toString();
        req.setAttribute("com.xp.input", input);
    }
    if (input == null) {
        return "";
    } 
    String header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    String body = input.substring(38, input.lastIndexOf('>')+1);
    body = body.substring(body.indexOf('<'));
    return header+"\n"+body+"\n";

}
req.setCharacterEncoding(“UTF-8”);
公共字符串getXML(HttpServletRequest req)引发IOException{
字符串输入=null;
if((输入=(字符串)req.getAttribute(“com.xp.input”))==null){
StringBuilder缓冲区=新的StringBuilder();
BufferedReader reader=req.getReader();
弦线;
而((line=reader.readLine())!=null){
buffer.append(行);
}
输入=buffer.toString();
req.setAttribute(“com.xp.input”,输入);
}
如果(输入==null){
返回“”;
} 
字符串标题=”;
字符串体=input.substring(38,input.lastIndexOf('>')+1);

body=body.substring(body.indexOf)('@rzymek:Just a note:字节到字符的转换仍在进行,但这次读取器考虑了请求编码:@Niklas-ryzemek的代码是正确的。您如何检查字符?请注意,管理控制台没有正确显示UTF-8字符。@PeterKnego我已经检查了
getReader()
docs,以确保没有可怕的“平台默认字符集”,但你是对的-我编辑了答案以使其更清晰。@PeterKnego我通过将字符串保存到MemCache来检查数据。我尝试过,现在它可以处理特殊字符。
req.setCharacterEncoding("UTF-8");
public String getXML(HttpServletRequest req) throws IOException{    
    String input = null;
    if ((input = (String) req.getAttribute("com.xp.input")) == null) {
        StringBuilder buffer = new StringBuilder();
        BufferedReader reader = req.getReader();

        String line;
        while((line = reader.readLine()) != null){
            buffer.append(line);
        }
        input = buffer.toString();
        req.setAttribute("com.xp.input", input);
    }
    if (input == null) {
        return "";
    } 
    String header = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
    String body = input.substring(38, input.lastIndexOf('>')+1);
    body = body.substring(body.indexOf('<'));
    return header+"\n"+body+"\n";

}