كيفية تحويل ملف XML في UTF-8 باستخدام Streamingmarkupbuilder
-
20-09-2019 - |
سؤال
حتى لو كان موضوع الأسئلة معقدا، فإن القضية بسيطة للغاية.
أقوم بإنشاء ملف XML مع البرنامج النصي التالي:
def xmlFile = new File("file-${System.currentTimeMillis()}.xml")
mb = new groovy.xml.StreamingMarkupBuilder()
mb.encoding = "UTF-8"
new FileWriter(xmlFile) << mb.bind {
mkp.xmlDeclaration()
out << "\n"
someMarkup {}
}
ثم عندما أقوم بتحليل هذا الملف باستخدام رمز مثل:
def xml = new XmlSlurper().parse(xmlFile)
حصلت على ما يلي MalformedByteSequenceException
استثناء:
استثناء ألقيت: بايت غير صالح 2 من تسلسل 3 بايت UTF-8
وإذا قمت بتحويل الملف بتنسيق UTF-8 (باستخدام المفكرة ++ على سبيل المثال)، فكل شيء على ما يرام.
لذلك، ماذا يمكنني أن أفعل لحفظ ملفي بتنسيق UTF-8؟ لماذا الكود mb.encoding = "UTF-8"
لا تفعل ذلك؟
شكرًا
المحلول
تحتاج إلى التفاف كاتب دفق الإخراج حول ملفات fileOutstream هو UTF-8 ليس المجذوف الافتراضي
new OutputStreamWriter(new FileOutputStream(exportXmlFile),'utf-8') << mb.bind {
mkp.xmlDeclaration()
out << "\n"
someMarkup {}
}
لست متأكدا مما يؤدي إلى إعداد MB.Encoding، ربما يضبط فقط Charset في رأس XML
لا تنتمي إلى StackOverflow