Tomcat文本文件编码

时间:2016-04-18 08:20:28

标签: java tomcat character-encoding java-io

我有一个java webapp,它从磁盘上的文件读取并返回所需的值。磁盘上的文件包含UTF-8字符。

文件内容示例:

lähedus teeb korterist atraktiivse üüriobjekti välismaalastele

当webapp在localhost*上运行时,servlet从磁盘读取并返回:

lähedus teeb korterist atraktiivse üüriobjekti välismaalastele

当我在单独的服务器上运行相同的应用程序时,相同的请求会返回此信息:

l??hedus teeb korterist atraktiivse ????riobjekti v??lismaalastele

这纯粹是一个编码问题,但我不知道如何解决它。

我尝试过:

  • 我将此添加到config / server.xml

    <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" 
    URIEncoding="UTF-8"/> <!-- THIS PART
    

但它没有帮助。 我应该在配置中更改什么才能让它在服务器上运行? 谢谢!

修改

我正在从包含json字符串的服务器上的txt文件中读取。 我正在使用java BufferReader来读取内容。正如我在评论中提到的,这个问题不是由读者引起的,因为同样适用于localhost。

我通过servlet发送响应,它只是刷新json字符串。与读者一样的故事。

我在发出请求的任何客户端上都会出现问号(浏览器,安卓等)。

1 个答案:

答案 0 :(得分:1)

您的本地文件似乎是UTF-8,错误地转换为某些单字节编码。当人们看到一个特殊字符的多字节序列导致两个不可转换的字符(?)。

应用程序在没有编码规范的情况下读取它,因此使用系统的编码。那不是你想要的东西。

然后你需要找到错误的阅读代码:通常有一个重载方法,可以添加编码。然而臭名昭着的是FileReader,该实用程序类总是使用默认编码。检查出现的情况:

  • InputStreamReader的
  • new String
  • String.getBytes
  • 扫描仪

为了良好的顺序,但可能不是这里的情况:任何产生该文本的响应都应该在content-type中指定charset。