org.xml.sax.SAXParseException: Konten tidak diizinkan dalam prolog

161

Saya memiliki klien layanan web berbasis Java yang terhubung ke layanan web Java (diimplementasikan pada kerangka kerja Axis1).

Saya mendapatkan pengecualian berikut dalam file log saya:

Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
    at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
    at javax.xml.parsers.SAXParser.parse(Unknown Source)
    at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
    at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
    at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
    at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:114)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.client.AxisClient.invoke(AxisClient.java:198)
    at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
    at org.apache.axis.client.Call.invoke(Call.java:2767)
    at org.apache.axis.client.Call.invoke(Call.java:2443)
    at org.apache.axis.client.Call.invoke(Call.java:2366)
    at org.apache.axis.client.Call.invoke(Call.java:1812)
ag112
sumber
11
Ini akan membantu jika Anda menunjukkan kepada kami XML yang ingin Anda uraikan. (Saya kira hanya beberapa baris pertama yang bisa dilakukan.)
Stephen C
Terima kasih Stephen, saya mencoba mengambil Permintaan XML dari kerangka AXIS dan menempelkannya di sini. Jadi pengertian umum kesalahan di atas adalah XML tidak terbentuk dengan baik.
ag112
Saya mengalami masalah ini karena saya mencoba mengubah nama string dari file xml daripada file xml sebagai string! : P
Gaʀʀʏ

Jawaban:

242

Ini sering disebabkan oleh spasi putih sebelum deklarasi XML, tetapi bisa berupa teks apa saja , seperti tanda hubung atau karakter apa pun. Saya katakan sering disebabkan oleh ruang putih karena orang menganggap ruang putih selalu diabaikan, tapi bukan itu masalahnya.


Hal lain yang sering terjadi adalah UTF-8 BOM (byte urutan mark), yang adalah diperbolehkan sebelum deklarasi XML dapat diperlakukan sebagai spasi jika dokumen tersebut diserahkan sebagai aliran karakter ke parser XML bukan sebagai aliran byte .

Hal yang sama dapat terjadi jika file skema (.xsd) digunakan untuk memvalidasi file xml dan salah satu file skema memiliki BOM UTF-8 .

Mike Sokolov
sumber
17
Untuk semua orang seperti saya, yang berjuang untuk memahami apa yang harus dilakukan dengan John Humphreys - saran w00te: ubah Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))keDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
RealMan
32

Sebenarnya selain Yuriy Zubarev's Post

Saat Anda meneruskan file xml yang tidak ada ke parser. Misalnya kamu lulus

new File("C:/temp/abc")

ketika hanya file C: /temp/abc.xml ada di sistem file Anda

Dalam kedua kasus itu

builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
document = builder.parse(new File("C:/temp/abc"));

atau

DOMParser parser = new DOMParser();
parser.parse("file:C:/temp/abc");

Semua memberikan pesan kesalahan yang sama.

Bug sangat mengecewakan, karena mengikuti jejaknya

javax.servlet.ServletException
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
...
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
... 40 more

tidak mengatakan apa-apa tentang fakta 'nama file tidak benar' atau 'file seperti itu tidak ada'. Dalam kasus saya, saya memiliki file xml yang benar-benar benar dan harus menghabiskan 2 hari untuk menentukan masalah sebenarnya.

Egor
sumber
Sama dengan mencoba mengurai direktori alih-alih nama file, FWIW.
rogerdpack
... @Egor inilah sebabnya semua orang membenci XML. Kehilangan 2 hari kerja karena kegagalan bodoh ..
Gewure
Benar-benar setuju @Gewure :) Itu adalah beberapa posting kuno dari 2012 dan saya bahkan melupakannya, tapi benar
Egor
1
Ini juga terjadi, ketika Anda memiliki jalur yang benar, tetapi dengan simbol khusus, seperti: C: \ # MyFolder \ My.XML File tersebut ada, tetapi "#" membawa masalah ke parser XML ... Java sendiri, serta M $ Windows, tidak memiliki masalah dengan nama folder ini .... Perilaku pesan pengecualian yang sangat buruk ....
Alex
26

Coba tambahkan spasi antara encoding="UTF-8"string di prolog dan terminating ?>. Dalam XML prolog menunjuk elemen pembatas tanda tanya-braket ini pada awal dokumen (sementara prolog tag dalam stackoverflow mengacu pada bahasa pemrograman).

Ditambahkan: Apakah tanda hubung di depan bagian prolog Anda dari dokumen? Itu akan menjadi kesalahan di sana, memiliki data di depan prolog -<?xml version="1.0" encoding="UTF-8"?>,.

hardmath
sumber
1
+1. Saya telah menemukan bahwa beberapa parser XML membuang pengecualian ini bahkan ketika prolog XML berisi spasi - jadi saya pikir pasti perlu memeriksa bahwa tidak ada yang mendahului <?xml ver...bit.
11

Saya memiliki masalah yang sama (dan menyelesaikannya) ketika mencoba mengurai dokumen XML dengan freemarker.

Saya tidak punya spasi sebelum header file XML.

Masalah terjadi ketika dan hanya ketika penyandian file dan atribut penyandian XML berbeda.(mis. File UTF-8 dengan atribut UTF-16 di header).

Jadi saya punya dua cara untuk menyelesaikan masalah:

  1. mengubah penyandian file itu sendiri
  2. mengubah header UTF-16 ke UTF-8
JoshDM
sumber
1
Saya kira secara umum setiap kasus di mana parser menerima informasi yang bertentangan tentang pengkodean karakter dapat menyebabkan masalah ini.
Raedwald
9

Ini berarti XML salah format atau badan respons bukan dokumen XML sama sekali.

Yuriy Zubarev
sumber
Saya memeriksa dan sepertinya XML terbentuk dengan baik. Ini snapshot: - <? Xml version = "1.0" encoding = "UTF-8"?> <Soapenv: Envelope xmlns: soapenv = " schemas.xmlsoap.org/soap/envelope " xmlns: xsd = " w3.org/ 2001 / XMLSchema "xmlns: xsi =" w3.org/2001/XMLSchema-instance "> <soapenv: Header> <wsse: Keamanan xmlns: wsse =" docs.oasis-open.org/wss/2004/01/… " soapenv: mustUnderstand = "1"> .... </ wsse: Security> </ soapenv: Header> <soapenv: Body> .XX .. </ soapenv: Tubuh> </ soapenv: Envelope>
ag112
1
Ya, jika ada tanda hubung di depan, itu akan merusak XML.
Yuriy Zubarev
7

Hanya menghabiskan waktu 4 jam untuk melacak masalah serupa di WSDL. Ternyata WSDL menggunakan XSD yang mengimpor XSD namespace lain. XSD yang diimpor ini berisi yang berikut:

<?xml version="1.0" encoding="UTF-8"?>
<schema targetNamespace="http://www.xyz.com/Services/CommonTypes" elementFormDefault="qualified"
    xmlns="http://www.w3.org/2001/XMLSchema" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:CommonTypes="http://www.xyz.com/Services/CommonTypes">

 <include schemaLocation=""></include>  
    <complexType name="RequestType">
        <....

Perhatikan includeelemen kosong ! Ini adalah akar kesengsaraan saya. Saya kira ini adalah variasi pada file Egor yang tidak menemukan masalah di atas.

+1 hingga pelaporan kesalahan mengecewakan.

colin_froggatt
sumber
4

Dalam kasus saya, menghapus atribut 'encoding = "UTF-8"' semuanya berfungsi.

Sepertinya masalah pengodean karakter, mungkin karena file Anda tidak benar-benar dalam UTF-8.

Jerome Louvel
sumber
4

Jawaban saya mungkin tidak akan membantu Anda, tetapi umumnya membantu masalah ini.

Ketika Anda melihat pengecualian semacam ini, Anda harus mencoba membuka file xml Anda di Hex Editor dan kadang-kadang Anda dapat melihat byte tambahan di awal file yang tidak ditampilkan oleh editor teks.

Hapus mereka dan xml Anda akan diuraikan.

Igor Kustov
sumber
4

Terkadang itu kodenya, bukan XML

Kode berikut,

Document doc = dBuilder.parse(new InputSource(new StringReader("file.xml")));

juga akan menghasilkan kesalahan ini,

[Kesalahan Fatal]: 1: 1: Konten tidak diizinkan di prolog.org.xml.sax.SAXParseException; lineNumber: 1; kolom Nomor: 1; Konten tidak diizinkan dalam prolog.

karena berusaha mengurai string literal, "file.xml"(bukan isi file.xmlfile) dan gagal karena"file.xml" sebagai string XML tidak terbentuk dengan baik.

Perbaiki: Hapus StringReader():

Document doc = dBuilder.parse(new InputSource("file.xml"));

Demikian pula, masalah buffer kotor dapat meninggalkan sisa sampah di depan XML yang sebenarnya. Jika Anda telah memeriksa XML Anda dengan saksama dan masih mendapatkan kesalahan ini, catat konten yang sebenarnya dikirimkan ke parser; kadang-kadang apa yang sebenarnya (dicoba untuk diuraikan) mengejutkan.

kjhughes
sumber
1
Solusi ini dipandu di jalur yang benar karena saya lupa menambahkan applicaionContext.xmljalur dalam kode, dan tidak memeriksa dalam kode sedang mencari kesalahan hanya dalam file XML
Mrinmoy
3

Pertama bersihkan proyek, kemudian bangun kembali proyek. Saya juga menghadapi masalah yang sama. Semuanya baik-baik saja setelah ini.

Bibin Johny
sumber
2

Jika semuanya gagal, buka file dalam biner untuk memastikan tidak ada karakter lucu [3 karakter tidak dapat dicetak di awal file yang mengidentifikasi file sebagai utf-8] di awal file. Kami melakukan ini dan menemukan beberapa. jadi kami mengonversi file dari utf-8 ke ascii dan berhasil.

Muntah
sumber
2

Untuk masalah yang sama, saya telah menghapus baris berikut,

  File file = new File("c:\\file.xml");
  InputStream inputStream= new FileInputStream(file);
  Reader reader = new InputStreamReader(inputStream,"UTF-8");
  InputSource is = new InputSource(reader);
  is.setEncoding("UTF-8");

Ini bekerja dengan baik. Tidak begitu yakin mengapa UTF-8 memberi masalah. Untuk membuat saya kaget, itu berfungsi dengan baik untuk UTF-8 juga.

Saya menggunakan Windows-7 32 bit dan Netbeans IDE dengan Java * jdk1.6.0_13 *. Tidak tahu cara kerjanya.

Dineshkumar Ponnusamy
sumber
2

Seperti yang telah ditunjukkan oleh Mike Sokolov, salah satu alasan yang mungkin adalah adanya beberapa karakter (seperti spasi) sebelum tag.

Jika input XML Anda sedang dibaca sebagai String (sebagai lawan dari array byte) maka Anda dapat menggunakan ganti string input Anda dengan kode di bawah ini untuk memastikan bahwa semua karakter 'tidak perlu' sebelum tag xml dihapus.

inputXML=inputXML.substring(inputXML.indexOf("<?xml"));

Anda harus yakin bahwa input xml dimulai dengan tag xml.

Sahil J
sumber
2

Dalam kasus saya web.xml dalam aplikasi saya memiliki ruang ekstra bahkan setelah saya menghapus tidak bekerja saya harus mengembalikan chages dan perbaikannya dan ya saya sedang bermain dengan logging.properties dan web.xml di kucing jantan saya tetapi bahkan setelah saya mengembalikan kesalahan terus ditampilkan jadi ini memperbaikinya)).

ruang ekstra

Untuk lebih spesifik saya coba lakukan menambahkan org.apache.catalina.filters.ExpiresFilter.level = FINE stack over flow sesuatu tentang logging.properties

shareef
sumber
1

Saya mengikuti instruksi yang ditemukan di sini dan saya mendapatkan kesalahan yang sama.

Saya mencoba beberapa hal untuk menyelesaikannya (yaitu mengubah pengkodean, mengetik file XML daripada menyalin-menempelnya dll) di Notepad dan XML Notepad tetapi tidak ada yang berhasil.

Masalahnya terpecahkan ketika saya mengedit dan menyimpan file XML saya di Notepad ++ (penyandian -> utf-8 tanpa BOM)

BitCollector
sumber
1

Untuk semua yang mendapatkan kesalahan ini: PERINGATAN: Catalina.start menggunakan conf / server.xml: Konten tidak diperbolehkan dalam prolog.

Tidak terlalu informatif .. tetapi sebenarnya ini berarti ada sampah di file conf / server.xml Anda.

Saya telah melihat kesalahan ini dalam file XML lainnya .. kesalahan ini dapat disebabkan oleh membuat perubahan dengan editor teks yang memperkenalkan sampah.

Cara Anda dapat memverifikasi apakah Anda memiliki sampah di file tersebut dengan membukanya dengan "Editor HEX" Jika Anda melihat karakter apa pun sebelum string ini

     "<?xml version="1.0" encoding="UTF-8"?>"

seperti ini akan menjadi sampah

     "‰ŠŒ<?xml version="1.0" encoding="UTF-8"?>"

itu adalah masalah Anda .... Solusinya adalah menggunakan Editor HEX yang baik .. Salah satu yang akan memungkinkan Anda untuk menyimpan file dengan berbagai jenis pengkodean ..

Kemudian simpan saja sebagai UTF-8. Beberapa sistem yang menggunakan file XML mungkin perlu disimpan sebagai UTF NO BOM Yang berarti dengan "NO Byte Order Mark"

Semoga ini bisa membantu seseorang di luar sana !!

CA Martin
sumber
1

Bagi saya, Build-> Clean memperbaiki semuanya!

FabioLux
sumber
1

Untuk memperbaiki masalah BOM pada sistem Unix / Linux:

  1. Periksa apakah ada karakter BOM yang tidak diinginkan: hexdump -C myfile.xml | more Karakter BOM yang tidak diinginkan akan muncul di awal file sebagai...<?xml>

  2. Atau, lakukan file myfile.xml. File dengan karakter BOM akan muncul sebagai:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text

  3. Perbaiki satu file dengan: tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml

  4. Ulangi 1 atau 2 untuk memeriksa apakah file telah disanitasi. Mungkin juga masuk akal untuk dilakukan view myfile.xmluntuk memeriksa konten yang sudah ada.

Berikut skrip bash untuk membersihkan seluruh folder file XML:

#!/usr/bin/env bash

# This script is to sanitise XML files to remove any BOM characters

has_bom() { head -c3 "$1" | LC_ALL=C grep -qe '\xef\xbb\xbf'; }

for filename in *.xml ; do
  if has_bom ${filename}; then
    tail -c +4 ${filename} > temp.xml
    mv temp.xml ${filename}
  fi
done
Lydia Ralph
sumber
0

Hanya pemikiran tambahan yang satu ini untuk masa depan. Mendapatkan bug ini bisa menjadi kasus bahwa seseorang cukup menekan tombol hapus atau beberapa kunci lain secara acak ketika mereka memiliki jendela XML sebagai tampilan aktif dan tidak memperhatikan. Ini telah terjadi pada saya sebelumnya dengan file struts.xml di aplikasi web saya. Siku canggung ...

demongolem
sumber
Saya memastikan saya tidak menekan tombol apa pun
Mad-D
0

Saya juga mendapatkan hal yang sama

XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.

, ketika aplikasi saya membuat respons XML untuk panggilan layanan Web RestFull. Saat membuat format XML, String saya mengganti & lt dan & gt dengan <dan> kemudian kesalahannya hilang, dan saya mendapatkan respons yang tepat. Tidak yakin cara kerjanya tetapi berhasil.

sampel :

String body = "<ns:addNumbersResponse xmlns:ns=\"http://java.duke.org\"><ns:return>"
            +sum
            +"</ns:return></ns:addNumbersResponse>";
Satish M
sumber
0

Saya memiliki masalah yang sama.

Pertama saya mengunduh file XML ke desktop lokal dan saya dapatkan Content is not allowed in prologselama mengimpor file ke server portal. Bahkan file secara visual terlihat bagus untuk saya tetapi entah bagaimana itu rusak.

Jadi saya mengunduh ulang file yang sama dan mencoba yang sama dan berhasil.

Paresh
sumber
0

Kami memiliki masalah yang sama baru-baru ini dan ternyata merupakan kasus URL yang buruk dan akibatnya respons HTTP standar 403 (yang jelas bukan XML yang valid yang dicari klien). Saya akan berbagi detail jika seseorang dalam konteks yang sama mengalami masalah ini:

Ini adalah aplikasi web berbasis Spring di mana kacang "JaxWsPortProxyFactoryBean" dikonfigurasi untuk mengekspos proxy untuk port jarak jauh.

<bean id="ourPortJaxProxyService"
    class="org.springframework.remoting.jaxws.JaxWsPortProxyFactoryBean"
    p:serviceInterface="com.amir.OurServiceSoapPortWs"
    p:wsdlDocumentUrl="${END_POINT_BASE_URL}/OurService?wsdl"
    p:namespaceUri="http://amir.com/jaxws" p:serviceName="OurService"
    p:portName="OurSoapPort" />

"END_POINT_BASE_URL" adalah variabel lingkungan yang dikonfigurasi dalam "setenv.sh" dari instance Tomcat yang meng-host aplikasi web. Konten file adalah seperti ini:

export END_POINT_BASE_URL="http://localhost:9001/BusinessAppServices"
#export END_POINT_BASE_URL="http://localhost:8765/BusinessAppServices"

Yang hilang ";" setelah setiap baris menyebabkan URL salah dan dengan demikian respons yang buruk. Artinya, alih-alih "BusinessAppServices / OurService? Wsdl" URL memiliki CR sebelum "/". "Monitor TCP / IP" cukup praktis saat memecahkan masalah.

Amir Keibi
sumber
0

Dalam kasus saya, saya mendapatkan kesalahan ini karena API yang saya gunakan dapat mengembalikan data dalam format XML atau JSON. Ketika saya mengujinya menggunakan browser, itu default ke format XML, tetapi ketika saya memanggil panggilan yang sama dari aplikasi Java, API mengembalikan respons diformat JSON, yang secara alami memicu kesalahan parsing.

zovits
sumber
0

Bahkan saya pernah menghadapi masalah serupa. Alasannya adalah beberapa karakter sampah di awal file.

Perbaiki: Cukup buka file dalam editor teks (diuji pada teks Sublime) hapus indentasi jika ada dalam file dan salin tempelkan semua konten file dalam file baru dan simpan. Itu dia!. Ketika saya menjalankan file baru itu berjalan tanpa kesalahan parsing.

Aditya Gaykar
sumber
0

Saya mengambil kode Dineshkumar dan dimodifikasi untuk memvalidasi file XML saya dengan benar:

import org.apache.log4j.Logger;

public class Myclass{

private static final Logger LOGGER = Logger.getLogger(Myclass.class);

/**
 * Validate XML file against Schemas XSD in pathEsquema directory
 * @param pathEsquema directory that contains XSD Schemas to validate
 * @param pathFileXML XML file to validate
 * @throws BusinessException if it throws any Exception
 */
public static void validarXML(String pathEsquema, String pathFileXML) 
	throws BusinessException{	
	String W3C_XML_SCHEMA = "http://www.w3.org/2001/XMLSchema";
	String nameFileXSD = "file.xsd";
	String MY_SCHEMA1 = pathEsquema+nameFileXSD);
	ParserErrorHandler parserErrorHandler;
	try{
		SchemaFactory schemaFactory = SchemaFactory.newInstance(W3C_XML_SCHEMA);
		
		Source [] source = { 
			new StreamSource(new File(MY_SCHEMA1))
			};
		Schema schemaGrammar = schemaFactory.newSchema(source);

		Validator schemaValidator = schemaGrammar.newValidator();
		schemaValidator.setErrorHandler(
			parserErrorHandler= new ParserErrorHandler());
		
		/** validate xml instance against the grammar. */
		File file = new File(pathFileXML);
		InputStream isS= new FileInputStream(file);
		Reader reader = new InputStreamReader(isS,"UTF-8");
		schemaValidator.validate(new StreamSource(reader));
		
		if(parserErrorHandler.getErrorHandler().isEmpty()&& 
			parserErrorHandler.getFatalErrorHandler().isEmpty()){
			if(!parserErrorHandler.getWarningHandler().isEmpty()){
				LOGGER.info(
				String.format("WARNING validate XML:[%s] Descripcion:[%s]",
					pathFileXML,parserErrorHandler.getWarningHandler()));
			}else{
				LOGGER.info(
				String.format("OK validate  XML:[%s]",
					pathFileXML));
			}
		}else{
			throw new BusinessException(
				String.format("Error validate  XML:[%s], FatalError:[%s], Error:[%s]",
				pathFileXML,
				parserErrorHandler.getFatalErrorHandler(),
				parserErrorHandler.getErrorHandler()));
		}		
	}
	catch(SAXParseException e){
		throw new BusinessException(String.format("Error validate XML:[%s], SAXParseException:[%s]",
			pathFileXML,e.getMessage()),e);
	}
	catch (SAXException e){
		throw new BusinessException(String.format("Error validate XML:[%s], SAXException:[%s]",
			pathFileXML,e.getMessage()),e);
	}
	catch (IOException e) {
		throw new BusinessException(String.format("Error validate XML:[%s], 
			IOException:[%s]",pathFileXML,e.getMessage()),e);
	}
	
}

}

RodH
sumber
0

Setel dokumen Anda menjadi seperti ini:

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    %children%
</root>
Pavel
sumber
0

Saya memiliki masalah yang sama dengan musim semi

MarshallingMessageConverter

dan dengan kode pra-proses.

Mayby seseorang akan memerlukan alasan: BytesMessage #readBytes - membaca byte .. dan saya lupa bahwa membaca adalah operasi satu arah. Anda tidak dapat membaca dua kali.

Artem Ptushkin
sumber
0

Coba dengan BOMInputStream di apache.commons.io:

public static <T> T getContent(Class<T> instance, SchemaType schemaType, InputStream stream) throws JAXBException, SAXException, IOException {

    JAXBContext context = JAXBContext.newInstance(instance);
    Unmarshaller unmarshaller = context.createUnmarshaller();
    Reader reader = new InputStreamReader(new BOMInputStream(stream), "UTF-8");

    JAXBElement<T> entry = unmarshaller.unmarshal(new StreamSource(reader), instance);

    return entry.getValue();
}
Giuseppe Milazzo
sumber
0

Saya mengalami masalah yang sama saat mem-parsing info.plistfile di mac saya. Namun, masalah diperbaiki menggunakan perintah berikut yang mengubah file menjadi XML.

plutil -convert xml1 info.plist

Semoga itu bisa membantu seseorang.

Reaz Murshed
sumber
0

Saya memiliki masalah yang sama dengan beberapa file XML, saya menyelesaikan membaca file dengan encoding ANSI (Windows-1252) dan menulis file dengan encoding UTF-8 dengan skrip kecil dengan Python. Saya mencoba menggunakan Notepad ++ tetapi saya tidak berhasil:

import os
import sys

path = os.path.dirname(__file__)

file_name = 'my_input_file.xml'

if __name__ == "__main__":
    with open(os.path.join(path, './' + file_name), 'r', encoding='cp1252') as f1:
        lines = f1.read()
        f2 = open(os.path.join(path, './' + 'my_output_file.xml'), 'w', encoding='utf-8')
        f2.write(lines)
        f2.close()
Polo Ângelo
sumber