سؤال

حتى لو كان موضوع الأسئلة معقدا، فإن القضية بسيطة للغاية.

أقوم بإنشاء ملف 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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top