xmlファイルに日本語の文字が含まれています。しかし、私はそれはいくつかの他のcharacters.Pleaseに変換取得されたファイルは、以下のコードを参照読んでいます: - Customer.javafileChannelを使用して日本語の文字が正しく表示されない
を
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Customer {
@Override
public String toString() {
return "Customer [name=" + name + ", age=" + age + ", id=" + id + "]";
}
String name;
int age;
int id;
public String getName() {
return name;
}
@XmlElement
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
@XmlElement
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
}
Conversion.java
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.file.Path;
import java.nio.file.Paths;
public class Conversion {
public static void main(String[] args)
throws Exception {
Conversion conversion=new Conversion();
Path path = Paths.get("C:\\file.xml");
conversion.doReadFileNew(path);
}
private static void doReadFileNew(Path fileLocation) throws IOException, FileNotFoundException {
final int READ_FILE_BUFFER_SIZE = Integer
.valueOf(System.getProperty("READ_FILE_BUFFER_SIZE", "8192"));
StringBuilder output = null;
try (RandomAccessFile raf = new RandomAccessFile(fileLocation.toFile(), "r");
FileChannel fc = raf.getChannel();) {
output = new StringBuilder(READ_FILE_BUFFER_SIZE);
try {
ByteBuffer buffer = ByteBuffer.allocate(READ_FILE_BUFFER_SIZE);
while (fc.read(buffer) > 0) {
buffer.flip();
for (int i = 0; i < buffer.limit(); i++) {
output.append((char)buffer.get());
}
buffer.clear();
}
} finally { }
} catch (Exception e) {
throw e;
}
System.out.println(output);
}
}
入力ファイル"file.xml" とは: -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>29</age>
<name>株式会社三菱東京UFJ銀行</name>
</customer>
出力は、次のとおりです。 -
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
<age>29</age>
<name>₩ᅠᆰ¥ᄐマ¦ᄐレᄂᄒ¦ᄌノ│マᄆ₩ンᄆ¦ᄎᆲUFJ←ハタ│ᄀフ</name>
</customer>
助けてください。
このコードでは、UTF-8を指定していると思われますが、その理由は何ですか? 'byte 'を' char'にキャストすることは、UTF-8とは関係ありません。 – Andreas
あなたのコードがそれを使用していないとき、なぜあなたは私たちにクラス「顧客」を見せましたか? ---ファイルを最初から最後まで読み込むために 'RandomAccessFile'を使っているのはなぜですか? 'FileReader'または' FileInputStream'を使用してください。さらに、['Files.readAllBytes()'](https://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#readAllBytes-java.nio.file)を使用してください。 Path-)、新しい文字列(bytes、StandardCharsets.UTF_8)を返します。 – Andreas