来自UNIX的特殊字符无法被Java正确读取

时间:2016-05-02 08:51:56

标签: java unix character-encoding

我有一个Java应用程序,其中从UNIX中的文件中读取字符串。然后,使用URL POST方法将字符串传递给另一个应用程序。但是,当存在特殊字符时会出现问题,例如:

〜 ^ [ ] \ { } |

我正在使用StringBuilder构建URL:

new StringBuilder() .append("message=").append(message).toString()

是否有关于如何将这些字符从UNIX编码到Java的标准?我相信这是问题所在。

3 个答案:

答案 0 :(得分:1)

这些是用于正则表达式的字符。

所以在某处你将字符串放在预期正则表达式的位置。

  • replaceFirst
  • replaceAll而不是替换
  • 分割
  • 格式
  • 的printf

编码不能是这里的错误(普通的ASCII函数)。但请注意,FileReader是一个旧的实用程序类,它使用默认的平台编码读取文件。 当文件采用已知编码时,比如说UTF-8,最好是:

Path path = file.toPath();
try (BufferedReader in = Files.newBufferedReader(path, StandardCharsets.UTF_8)) {
    ...
}

答案 1 :(得分:0)

要从Java文件中正确读取字符,您需要指定字符集。例如。像这样(为了简洁而遗漏了错误处理):

String charset = "UTF-8"; // replace with what you are really using in your Unix system
Reader reader = new InputStreamReader(new FileInputStream(file), charset);
// use the reader...

答案 2 :(得分:0)

网址要求对某些字符进行编码。这与Unix或Java无关;它是URL规范的一部分。

在Java中,您可以使用URLEncoder.encode方法对任意文本进行编码,使其适合网址:

new StringBuilder()
        .append("message=")
        .append(URLEncoder.encode(message, "UTF-8"))
        .toString()