【问题标题】:BufferedReader/Writer not working correctly with Special CharsBufferedReader/Writer 无法与特殊字符一起正常工作
【发布时间】:2013-12-12 14:34:41
【问题描述】:

我在 Java 中遇到了 CipherBufferedReader/Writer 的小问题。一切正常,如果有人想要我的代码,如果你愿意,我可以发布它。问题是,如果我尝试将加密字节转换为字符串(可以正常工作),然后使用以下设置将其写入带有BufferedWriter 的文件:

    FileWriter fwrit = new FileWriter(file);
BufferedWriter buffwrit = new BufferedWriter(fwrit); //The writer itself
String encTextString = new String(encText,"ISO-8859-1"); //The String that gets written later

此设置允许 Writer 写入特殊字符,我认为问题不在这里(如果是,请告诉我)。 (是的,我已经检查过在不将其写入文件并再次加载的情况下解密是否有效并且确实有效。)问题是我无法正确设置BufferedReader,是否有办法或其他写入器类型可以正确读取字符?

【问题讨论】:

  • 可能是重复的吗? stackoverflow.com/q/9281629/2231632
  • 前段时间我已经尝试过该问题中的建议,但对我没有用。
  • 按照 Russell 的建议,您是否尝试过使用 OutputStreamWriter?

标签: java bufferedreader encryption bufferedwriter


【解决方案1】:

来自FileWriter javadoc

“用于写入字符文件的便利类。该类的构造函数假定默认字符编码和默认字节缓冲区大小是可以接受的。要自己指定这些值,请在FileOutputStream 上构造OutputStreamWriter。”

默认字符集可能是 UTF-8。所以,如果你想编写 ISO-8859-1,你需要这样做:

new OutputStreamWriter(new FileOutputStream(file), Charset.forName("ISO-8859-1"))

不过,更重要的是,如果您的目标是将编码字节放入文件而不进行更改,那么...

FileWriter 用于写入字符流。对于写入原始字节流,请考虑使用FileOutputStream。”

【讨论】:

  • 这样吗? BufferedWriter buffwrit = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"ISO-8859-1"));
【解决方案2】:

最好不要使用 FileWriter,该类只是一个方便的类,可以将 FileOutputStream 包装到 OutputStreamWriter 中。

OutputStreamWriter 具有使用特定编码对非 ascii 字符进行编码的构造函数。

FileWriter 缺少这些....

【讨论】:

  • 还是有问题。我使用了您的方法和相同的 ISO-8859-1 编码。结果: 写入的内容:[B@16d19d73 E�z�9�� 读取的内容:E?z?9?? [B@5ccc078
猜你喜欢
  • 2021-01-28
  • 1970-01-01
  • 2019-08-28
  • 1970-01-01
  • 2023-03-05
  • 1970-01-01
  • 2015-10-20
  • 2020-10-12
  • 2015-05-23
相关资源
最近更新 更多