2017-06-16 12 views
0

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> 

助けてください。

+2

このコードでは、UTF-8を指定していると思われますが、その理由は何ですか? 'byte 'を' char'にキャストすることは、UTF-8とは関係ありません。 – Andreas

+0

あなたのコードがそれを使用していないとき、なぜあなたは私たちにクラス「顧客」を見せましたか? ---ファイルを最初から最後まで読み込むために '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

答えて

0

あなたはCharset.forName("UTF-8").decode(buffer)を追加する必要がある場合があります

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; 
    Charset charset = Charset.forName("UTF-8"); 
    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(charset.decode(buffer)); 
        } 
        buffer.clear(); 
       } 
      } finally { } 
    } catch (Exception e) { 
     throw e; 
    } 
    System.out.println(output); 
} 
0

はこれを試してみてください。

import java.io.BufferedReader; 
import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 

public class Conversion { 
    public static void main(String[] args) throws Exception { 
     doReadFileNew("C:\\file.xml");   
    } 
    private static void doReadFileNew(String path) throws FileNotFoundException, IOException { 
     BufferedReader in = new BufferedReader(new FileReader(path)); 
     String line; 
     while((line = in.readLine()) != null) 
     { 
      System.out.println(line); 
     } 
     in.close(); 
    } 
} 
関連する問題