以下のようにTransformerを使用してxmlを出力しましたが、サロゲートペア文字を含む場合、文字参照で表示されます
「𠀋」と出力するには、どのようにすれば良いでしょうか?
サロゲート文字: 𠀋
出力:𠀋;(文字化けするためセミコロンを全角にしてあります)
java
1 2package xml; 3 4import java.io.File; 5 6import javax.xml.parsers.DocumentBuilder; 7import javax.xml.parsers.DocumentBuilderFactory; 8import javax.xml.parsers.ParserConfigurationException; 9import javax.xml.transform.Transformer; 10import javax.xml.transform.TransformerConfigurationException; 11import javax.xml.transform.TransformerException; 12import javax.xml.transform.TransformerFactory; 13import javax.xml.transform.dom.DOMSource; 14import javax.xml.transform.stream.StreamResult; 15 16import org.w3c.dom.Document; 17import org.w3c.dom.Element; 18 19public class XMLClass { 20 21 static String kenmei[] = {"T𠀋okyo", "Kanagawa","Chiba","Saitama","Gunma","Tochigi","Ibaraki"}; 22 23 public static void main(String[] args) { 24 25 // Documentインスタンスの生成 26 DocumentBuilder documentBuilder = null; 27 try { 28 documentBuilder = DocumentBuilderFactory.newInstance() 29 .newDocumentBuilder(); 30 } catch (ParserConfigurationException e) { 31 e.printStackTrace(); 32 } 33 Document document = documentBuilder.newDocument(); 34 // standalone 属性を記述しない 35 document.setXmlStandalone( true ); 36 37 // XML文書の作成 38 Element nihon = document.createElement("nihon"); 39 document.appendChild(nihon); 40 Element chiiki = document.createElement("kanto"); 41 nihon.appendChild(chiiki); 42 for (int i = 0; i <= 6; i++ ) { 43 Element ken = (Element) document.createElement("ken").cloneNode(false); 44 chiiki.appendChild(ken); 45 ken.appendChild(document.createTextNode(kenmei[i])); 46 } 47 48 // XMLファイルの作成 49 File file = new File("Kanto.xml"); 50 write(file, document); 51 } 52 53 54 public static boolean write(File file, Document document) { 55 56 // Transformerインスタンスの生成 57 Transformer transformer = null; 58 try { 59 TransformerFactory transformerFactory = TransformerFactory 60 .newInstance(); 61 transformer = transformerFactory.newTransformer(); 62 } catch (TransformerConfigurationException e) { 63 e.printStackTrace(); 64 return false; 65 } 66 67 // Transformerの設定 68 transformer.setOutputProperty("indent", "yes"); //改行指定 69 transformer.setOutputProperty("encoding", "UTF-8"); // エンコーディング 70 transformer.setOutputProperty("{http://xml.apache.org/xalan}indent-amount", "2");//インデントの桁指定 71 72 73 74 // XMLファイルの作成 75 try { 76 transformer.transform(new DOMSource(document), new StreamResult( 77 file)); 78 } catch (TransformerException e) { 79 e.printStackTrace(); 80 return false; 81 } 82 83 return true; 84 } 85} 86
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/05/19 04:13
2022/05/19 05:17 編集
2022/05/19 06:03
2022/05/19 06:40