当前位置: 首页 > 面试题库 >

码头响应字符编码

公良玺
2023-03-14
问题内容

如何在对UTF-8的回复中设置默认字符编码?

我已经试过了

    System.setProperty("file.encoding", "UTF-8");

还有这个

    System.setProperty("org.eclipse.jetty.util.UrlEncoding.charset", "utf-8");

都不起作用-响应仍与标头一起发送

Content-Type: text/html; charset=ISO-8859-1

我想对所有text / html响应都执行此操作,理想情况下是使用代码而不是XML。我正在使用Jetty 9。


问题答案:

Jetty文档声称它默认情况下使用UTF-8,但这似乎是一个谎言。如果执行normal
response.getWrite().println("Hello"),则内容编码如下确定。

  1. 从content-type到content-encoding的默认映射是从加载的org/eclipse/jetty/http/encoding.properties
        // MimeTypes.java:155
        ResourceBundle encoding = ResourceBundle.getBundle("org/eclipse/jetty/http/encoding");
        Enumeration<String> i = encoding.getKeys();
        while(i.hasMoreElements())
        {
            String type = i.nextElement();
            __encodings.put(type,encoding.getString(type));
        }
    

默认文件是:

text/html   = ISO-8859-1
text/plain  = ISO-8859-1
text/xml    = UTF-8
text/json   = UTF-8
  1. Response.getWriter() 尝试使用该地图,但默认为ISO-8859-1

    @Override
    public PrintWriter getWriter() throws IOException
    {
    if (_outputType == OutputType.STREAM)
    throw new IllegalStateException(“STREAM”);

    if (_outputType == OutputType.NONE)
    {
        /* get encoding from Content-Type header */
        String encoding = _characterEncoding;
        if (encoding == null)
        {
            encoding = MimeTypes.inferCharsetFromContentType(_contentType);
            if (encoding == null)
                encoding = StringUtil.__ISO_8859_1;
            setCharacterEncoding(encoding);
        }
    

因此,您可以看到text/html它并非默认为UTF-8。我认为没有办法从代码中更改默认值。最好的办法是将encoding.properties文件更改为此:

text/html   = UTF-8
text/plain  = UTF-8
text/xml    = UTF-8
text/json   = UTF-8

但是即使这样,即使找到的编码也不存在,它也会默认为ISO-8859-1。



 类似资料:
  • 我想在Camel环境中使用Jetty组件。这是我的spring配置的摘录。xml: 下面是用于返回字符串的代码: 本地地址有效(http://127.0.0.1/enc)但是浏览器没有正确显示字符串(显示为“abcÃö¼ÃŸ”–äääääŒääää‰)。我假设问题是一些编码。如何设置像“utf-8”这样的编码? 我在这里找不到任何提示(http://camel.apache.org/jetty.

  • 我收到一个标题为: 内容-长度:18588 content-type:application/json;charset=utf-8 日期:2015年12月2日星期三12:58:51 GMT 服务器:apache-coyote/1.1 在将“application/json”编码字符串发送到视图之前,是否有可能将其更改为“text/plain;charset=iso-8859-1”编码?我正在使用s

  • 我面临的一个场景是,字符“ᦙ”偶尔会从我的okhttp请求中返回,这个字符会导致一些下游问题。因此,我添加了代码来删除这个字符,如果它存在,我想添加一个测试用例,以确保这一工作正常。问题是wiremock似乎不喜欢这个特殊的角色。 通常我会这样从响应中提取数据: 通常这适用于我所有的请求。但是,当我设置wiremck以返回带有特殊字符的响应时(即使是单个响应,我想用许多不同的字段进行测试),字符串

  • So do not worry about tomorrow, for tomorrow will bring worries of its own. Today's trouble is enough for today. (MATTHEW 6:34) 字符编码 其实,标题前面应该加两个字——“坑爹”。 在实践中,字符编码的确是一个“坑”。因为这个世界上,不都是英文。如果都是英文,就没有这个问题

  • 我使用IBM worklight开发一个混合应用程序。在本地开发环境中,一切都很好。 还是用ISO-8859-1字符集获取数据,用UTF-8将数据插入数据库?

  • 我在超文本传输协议响应的字符编码方面遇到了问题。我阅读了许多技巧、教程等。,但我无法解决我的问题。我们使用带有Hibernate和ExtJS的Spring MVC作为视图技术。所有数据都以JSON的形式返回,使用控制器上的@响应体方法。示例方法: 有一种简单的调度机制来调度url命令(在这种情况下并不重要)。Process方法处理参数并返回JSON。例如,该JSON包含来自数据库(PostgreS