Java 如果在内容类型中声明了字符集,是否需要setCharacterEncoding()?

Java 如果在内容类型中声明了字符集,是否需要setCharacterEncoding()?,java,servlets,encoding,utf-8,character-encoding,Java,Servlets,Encoding,Utf 8,Character Encoding,我对如何很好地使用编码感到困惑。事实上,我读了一些书,上面说我们应该先setCharacterEncoding,然后再getParameter()。而根据 覆盖此文件正文中使用的字符编码的名称 要求必须在读取请求之前调用此方法 参数或使用getReader()读取输入。否则,它就没有任何意义 效果 因此,我认为,由于容器必须知道HTTP正文中的字符集是什么,因此,如果在HTTP正文中声明了字符集,我们似乎不需要setCharacterEncoding() 我尝试使用我现有的项目,该项目将使用我使

我对如何很好地使用编码感到困惑。事实上,我读了一些书,上面说我们应该先
setCharacterEncoding
,然后再
getParameter()
。而根据

覆盖此文件正文中使用的字符编码的名称 要求必须在读取请求之前调用此方法 参数或使用getReader()读取输入。否则,它就没有任何意义 效果

因此,我认为,由于容器必须知道HTTP正文中的字符集是什么,因此,如果在HTTP正文中声明了字符集,我们似乎不需要
setCharacterEncoding()

我尝试使用我现有的项目,该项目将使用我使用的xml outputstream提交请求

conn.setRequestProperty("Content-type", "text/xml;charset=utf-8");
PrintWriter pw = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8")); 
要对流进行编码,当我将此请求提交给Servlet时,
,即使我没有调用
request.setCharacterEncoding(“UTF-8”)`我可以看出中文文本解码得很好

所以它似乎是有效的,但当我从内容类型中删除
charset=utf-8
时,它也有效,这更令人困惑

下面是我如何将xml流读入地图的

public  static Map<String, String>  parseXml(HttpServletRequest request) throws IOException, DocumentException {
    Map<String,String> map=new HashMap<String,String>();
    InputStream is =request.getInputStream();
    SAXReader reader=new SAXReader();
    Document document=reader.read(is);      
    Element root =document.getRootElement();
    List<Element> elementList=root.elements();
    for(Element e: elementList){
        map.put(e.getName(), e.getText());
    }
    return map;     
}
publicstaticmap-parseXml(HttpServletRequest请求)抛出IOException、DocumentException{
Map Map=newhashmap();
InputStream=request.getInputStream();
SAXReader=新SAXReader();
Document=reader.read(is);
元素根=document.getRootElement();
List elementList=root.elements();
对于(元素e:元素列表){
put(e.getName(),e.getText());
}
返回图;
}
有人能解释一下当Servlet处理POST请求时编码是如何工作的吗?我们需要什么时间来显式地设置CharacterEncoding()


PS:我在Eclipse中运行我的客户机项目和服务器项目

使用非UTF-8编码也可以尝试同样的方法。@Thilo,我尝试了
新建OutputStreamWriter(conn.getOutputStream(),“UTF-16”)
,没有设置字符集或setCharacterEncoding,它也可以解析中文。