gpt4 book ai didi

java - 如何使用RandomAccessFile将UTF8数据写入xml文件?

转载 作者:太空宇宙 更新时间:2023-11-04 14:40:58 24 4
gpt4 key购买 nike

当尝试将一些 UTF8 数据写入文件时,我最终在文件中发现了一些垃圾。代码如下

public static boolean saveToFile(StringBuffer buffer,
String fileName,
ArrayList exceptionList,
String className)
{
log.debug("In saveToFile for file [" + fileName + "]");

RandomAccessFile raf = null;
File file = new File(fileName);
File backupFile = new File(fileName+"_bck");

try
{
if (file.exists())
{
if (backupFile.exists())
{
backupFile.delete();
}
file.renameTo(backupFile);
}
raf = new RandomAccessFile(file, "rw");
raf.writeBytes(buffer.toString());
raf.close();

buffer.toString() 的输出是

<?xml version="1.0" encoding="UTF-8"?>
<ivr>
<version>1.1</version>
<templateName>αβγδεζη

但是文件中的数据是

<?xml version="1.0" encoding="UTF-8"?>
<ivr>
<version>1.1</version>
<templateName>▒▒▒▒▒▒▒</templateName>

如何确保文件本身的数据是 UTF8

最佳答案

你得到垃圾我并不感到惊讶:

 raf.writeBytes(buffer.toString())

RandomAccessFile.writeBytes(String) 的文档说(强调):

Writes the string to the file as a sequence of bytes. Each character in the string is written out, in sequence, by discarding its high eight bits.

在某些情况下,该操作将生成正确编码的文件。但大多数情况下不会。 writeBytes() 方法是 Java 开发人员的愚蠢设计。您需要将文本正确编码为 UTF-8 中的字节,然后写入这些字节。

真的需要将该文件作为随机访问文件进行操作吗?如果没有,只需使用包装 OutputStreamWriter 来操作它。

您可以使用Charset.encode(CharBuffer)生成一个保存编码字节的 ByteBuffer,然后将这些字节写入文件:

 raf.write(StandardCharsets.UTF_8.encode(buffer).array());

关于java - 如何使用RandomAccessFile将UTF8数据写入xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24932750/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com