org.xml.sax.SAXParseException: Prologda içeriğe izin verilmiyor


161

Java web hizmetine bağlı (Axis1 çerçevesinde uygulanan) Java tabanlı bir web hizmeti istemcim var.

Günlük dosyamda aşağıdaki özel durumu alıyorum:

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)

11
Ayrıştırmaya çalıştığınız XML'yi bize göstermeniz size yardımcı olacaktır. (Sadece ilk birkaç satır beklerdim.)
Stephen C

Teşekkürler Stephen, AXIS çerçevesinden XML İsteği almaya ve buraya yapıştırmaya çalışıyorum. Dolayısıyla, yukarıdaki hatanın genel olarak anlaşılması XML'in iyi biçimlendirilmemiş olmasıdır.
ag112

Dize olarak xml dosyasının yerine xml dosyasının dize adını dönüştürmeye çalışıyordu çünkü bu sorunu vardı! : P
Gaʀʀʏ

Yanıtlar:


243

Bu genellikle XML bildiriminden önceki beyaz boşluktan kaynaklanır, ancak tire veya herhangi bir karakter gibi herhangi bir metin olabilir . Sıklıkla beyaz boşluktan kaynaklandığını söylüyorum, çünkü insanlar beyaz boşluğun her zaman cahil olduğunu varsayıyorlar, ancak burada durum böyle değil.


Sık olur başka şey bir olan UTF-8 BOM (bayt sırası işareti), bir XML bildirimi boşluk olarak tedavi edilebilir önce belge bir XML ayrıştırıcı karakterden oluşan bir akışı olarak yerine bayt akışı olarak teslim olup olmadığını izin .

Şema dosyaları (.xsd) xml dosyasını doğrulamak için kullanılırsa ve şema dosyalarından birinde UTF-8 BOM varsa da aynı durum ortaya çıkabilir .


17
Benim gibi herkes için John Humphreys ile ne yapacağını anlamaya çalışanlar Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))içinDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
w00te'nin

32

Aslında Yuriy Zubarev'in Postasına ek olarak

Ayrıştırıcıya varolmayan bir xml dosyası ilettiğinizde. Örneğin geçiyorsun

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

dosya sisteminizde yalnızca C: /temp/abc.xml dosyası varsa

Her iki durumda da

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

veya

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

Hepsi aynı hata mesajını verir.

Çok hayal kırıklığı yaratan bir hata, çünkü aşağıdaki iz

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

'dosya adı yanlış' veya 'böyle bir dosya mevcut değil' gerçeğiyle ilgili hiçbir şey söylemez. Benim durumumda kesinlikle doğru xml dosyasını vardı ve gerçek sorunu belirlemek için 2 gün harcamak zorunda kaldı.


Dosya adı yerine bir dizini ayrıştırmaya çalışmakla aynı şey, FWIW.
rogerdpack

... @Egor bu yüzden herkes XML'den nefret ediyor. Böyle aptal bir başarısızlık için 2 gün iş kaybetmek ..
Gewure

Kesinlikle katılıyorum @Gewure :) Bu 2012 eski bazı yazı oldu ve ben bile unutuyorum, ama gerçek
Egor

1
Bu, doğru bir yolunuz olduğunda, ancak aşağıdaki gibi özel sembollerle de olur: C: \ # MyFolder \ My.XML Dosya var, ancak "#" XML ayrıştırıcısına sorun getiriyor ... Java'nın kendisi M $ Windows, bu klasör adıyla bir sorun yok .... Çok kötü istisna mesajı davranış ....
Alex

26

encoding="UTF-8"Prologdaki dize ile sonlandırma arasına boşluk eklemeyi deneyin ?>. XML'de prolog bu parantez soru işareti ile ayrılmış öğeyi belgenin başlangıcında belirtir (yığın akışı içindeki tag prolog programlama dilini belirtir).

Eklendi: Prolog, belgenizin prolog bölümünün önünde mi? Prologun önünde veri olması, buradaki hata olacaktır -<?xml version="1.0" encoding="UTF-8"?>.


1
+1. XML prolog boşluklar içerdiğinde bile bazı XML ayrıştırıcılarının bu istisnayı engellediğini buldum - bu yüzden kesinlikle hiçbir şeyin <?xml ver...biraz önce olmadığını kontrol etmeye değer olduğunu düşünüyorum .

11

Freemarker ile bir XML belgesi ayrıştırmaya çalışırken aynı sorunu vardı (ve çözüldü).

XML dosyasının başlığından önce boşluk kalmamıştı.

Sorun yalnızca ve yalnızca dosya kodlaması ve XML kodlaması özniteliği farklı olduğunda oluşur.(ör: başlıkta UTF-16 özniteliği olan UTF-8 dosyası).

Bu yüzden sorunu çözmenin iki yolu vardı:

  1. dosyanın kendisinin kodlamasını değiştirme
  2. UTF-16 başlığını UTF-8 olarak değiştirme

1
Genel olarak ayrıştırıcının karakter kodlaması hakkında çakışan bilgiler aldığı her durumda bu soruna neden olabilir.
Raedwald

9

XML'in hatalı biçimlendirildiği veya yanıt gövdesinin hiç XML belgesi olmadığı anlamına gelir.


Kontrol ettim ve XML iyi biçimlendirilmiş gibi görünüyor. Anlık görüntü: - <? Xml sürüm = "1.0" kodlama = "UTF-8"?> <Soapenv: Zarf xmlns: soapenv = " schemas.xmlsoap.org/soap/envelope " xmlns: xsd = " w3.org/ 2001 / XMLSchema "xmlns: xsi =" w3.org/2001/XMLSchema-instance "> <soapenv: Üstbilgi> <wsse: Güvenlik xmlns: wsse =" docs.oasis-open.org/wss/2004/01/… " soapenv: mustUnderstand = "1"> .... </ wsse: Güvenlik> </ soapenv: Üstbilgi> <soapenv: Gövde> .XX .. </ soapenv: Gövde> </ soapenv: Zarf>
ag112

1
Evet, önünde bir tire varsa XML'i kırar.
Yuriy Zubarev

7

WSDL'de benzer bir sorunu izlemek için 4 saat harcadım. WSDL'nin başka bir XSD ad alanı ithal eden bir XSD kullandığı ortaya çıktı. Bu içe aktarılan XSD aşağıdakileri içeriyordu:

<?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">
        <....

Boşluğa dikkat edin include elemanı ! Bu benim sıkıntılarımın kökü idi. Sanırım bu, Egor'un dosyasında yukarıdaki sorun bulunamadı bir varyasyon.

Hayal kırıklığı yaratan hata bildirimi için +1.


4

Benim durumumda, 'encoding = "UTF-8"' özniteliğini kaldırmak tamamen işe yaradı.

Belki de dosyanız gerçekten UTF-8'de olmadığı için bir karakter kümesi kodlama sorunu gibi görünüyor.


4

Cevabım muhtemelen size yardımcı olmaz, ancak genellikle bu soruna yardımcı olur.

Bu tür bir istisna gördüğünüzde, herhangi bir Hex Editor'da xml dosyanızı açmaya çalışmalısınız ve bazen metin düzenleyicinin göstermediği dosyanın başında ek baytlar görebilirsiniz.

Onları silin, xml'niz ayrıştırılacaktır.


4

Bazen kod, XML değil

Aşağıdaki kod,

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

bu hatayla da sonuçlanır,

[Önemli Hata]: 1: 1: prolog.org.xml.sax.SAXParseException içinde içeriğe izin verilmiyor; lineNumber: 1; columnNumber: 1; İçerik giriş bölümünde kullanılamaz.

çünkü dizgi değişmezini "file.xml"( file.xmldosyanın içeriğini değil) ayrıştırmaya çalışıyor ve başarısız oluyor çünkü"file.xml" olarak düzgün biçimlendirilmiş XML olmadığı için .

Düzeltme: Kaldır StringReader():

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

Benzer şekilde, kirli arabellek sorunları gerçek XML'den önce artık önemsiz şeyler bırakabilir. XML'nizi dikkatlice kontrol ettiyseniz ve hala bu hatayı alıyorsanız, ayrıştırıcıya iletilen içeriği tam olarak günlüğe kaydedin; bazen aslında ayrıştırılmaya çalışılmaya çalışılan şey şaşırtıcıdır.


1
Kodda yol eklemeyi unuttum gibi bu çözüm doğru yolda applicaionContext.xmlyol gösterdi ve kod kontrol değildi sadece XML dosyasında hata arıyordu
Mrinmoy

3

Önce temiz proje, sonra projeyi yeniden oluşturun. Ben de aynı sorunla karşı karşıyaydım. Bundan sonra her şey yolunda gitti.


2

Geri kalan her şey başarısız olursa, dosyanın başında komik karakterler [Dosyanın başında dosyayı utf-8 olarak tanımlayan 3 yazdırılamayan karakter) olmadığından emin olmak için dosyayı ikili olarak açın. Bunu yaptık ve bazı bulduk. bu yüzden dosyayı utf-8'den ascii'ye dönüştürdük ve işe yaradı.


2

Aynı sorunlar için, aşağıdaki satırı kaldırdım,

  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");

İyi çalışıyor. UTF-8'in neden sorun verdiğinden emin değilim. Beni şokta tutmak için UTF-8 için de iyi çalışıyor.

Kullanarak muyum Windows 7 * jdk1.6.0_13 * Java ile 32 bit ve NetBeans IDE. Nasıl çalıştığı hakkında bir fikrim yok.


2

Mike Sokolov'un işaret ettiği gibi, olası nedenlerden biri, etiketten önce bazı karakterlerin (boşluk gibi) varlığıdır.

Girdi XML'niz bir Dize (bayt dizisinin aksine) olarak okunuyorsa, xml etiketinden önceki tüm 'gereksiz' karakterlerin silinmesini sağlamak için giriş dizenizi aşağıdaki kodla değiştirin.

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

Yine de xml girişinin xml etiketiyle başladığından emin olmalısınız.


2

Benim durumumda benim uygulamada web.xml ben silindikten sonra bile ekstra çalışma alanı var i chages ve düzeltmeleri geri dönmek zorunda kaldı ve evet ben tomcat benim logcat.properties ve web.xml ile oynuyordu ama ben geri döndükten sonra bile hata bu düzeltildi göstermeye devam etti)).

fazladan boşluk

Belirli olmak gerekirse ben org.apache.catalina.filters.ExpiresFilter.level = giriş üzerinde FINE yığın yapmak logging.properties hakkında bir şeyler yapmak


1

Burada bulunan talimatları takip ettim ve aynı hatayı aldım.

Not Defteri ve XML Not Defteri'nde (yani kodlama değiştirme, XML dosyasını kopyalamak yerine yapıştırmak yerine) çözmek için birkaç şey denedim ama hiçbir şey çalıştı.

XML dosyamı Notepad ++ uygulamasında düzenleyip kaydettiğimde sorun çözüldü (kodlama -> BOM olmadan utf-8)


1

Bu hatayı alan herkes için: UYARI: Catalina / conf / server.xml kullanmaya başlayın: Prologda içeriğe izin verilmiyor.

Çok bilgilendirici değil .. ama bunun gerçek anlamı, conf / server.xml dosyanızda çöp olmasıdır.

Diğer XML dosyalarında bu kesin hatayı gördüm .. Bu hata, çöp tanıtan bir metin editörü ile değişiklik yapmaktan kaynaklanabilir.

Dosyada çöp olup olmadığını doğrulamanın yolu "HEX Editor" ile açmaktır. Bu dizeden önce herhangi bir karakter görürseniz

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

bu çöp gibi

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

sizin sorununuz .... Çözüm iyi bir HEX Editör kullanmaktır .. Farklı kodlama türleri ile dosyaları kaydetmek için izin verecek bir ..

Sonra UTF-8 olarak kaydedin. XML dosyaları kullanan bazı sistemlerin UTF NO BOM olarak kaydedilmesi gerekebilir. Bu, "NO Byte Order Mark" ile anlamına gelir

Umarım bu birisine yardımcı olur !!



1

Unix / Linux sistemlerinde ürün ağacı sorununu gidermek için:

  1. İstenmeyen bir Malzeme Listesi karakteri olup olmadığını kontrol edin: hexdump -C myfile.xml | more Dosyanın başında istenmeyen bir Malzeme Listesi karakteri...<?xml>

  2. Alternatif olarak file myfile.xml. Ürün ağacı karakterine sahip bir dosya şöyle görünür:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text

  3. Şununla tek bir dosyayı düzeltin: tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml

  4. Dosyanın temizlendiğini kontrol etmek için 1 veya 2'yi tekrarlayın. Muhtemelen de view myfile.xmliçeriğini kontrol etmek için yapmak mantıklı kaldı.

XML dosyalarının bir klasörünü sterilize etmek için bir bash betiği:

#!/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

0

Gelecek için bu konuda sadece ek bir düşünce. Bu hatayı almak, etkin ekran olarak bir XML penceresi olduğunda ve dikkat etmediğinde, silme tuşuna veya başka bir tuşa rastgele vurması olabilir. Bu, web uygulamamdaki struts.xml dosyasıyla daha önce başıma geldi. Beceriksiz dirsekler ...


Herhangi bir tuşa basmadığımdan emin oldum
Mad-D

0

Ben de aynısını alıyordum

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

, uygulamam bir RestFull Webservis çağrısı için XML yanıtı oluştururken. XML formatı String'i oluştururken & lt ve & gt komutlarını <ve> ile değiştirdim, sonra hata gitti ve uygun yanıt alıyordum. Nasıl çalıştığından emin değilim ama işe yaradı.

örnek :

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

0

Aynı sorunu yaşadım.

Önce XML dosyasını yerel masaüstüne indirdim ve Content is not allowed in prologportal sunucusuna içe aktarma sırasında aldım . Görsel olarak bile dosya bana iyi bakıyordu ama bir şekilde bozuktu.

Bu yüzden aynı dosyayı yeniden indirip aynı denedim ve işe yaradı.


0

Son zamanlarda aynı sorunu yaşadık ve kötü bir URL ve sonuç olarak standart bir 403 HTTP yanıtı (ki istemcinin aradığı geçerli XML değil) ortaya çıktı. Aynı bağlamdaki birisinin bu sorunla karşılaşması durumunda ayrıntıları paylaşacağım:

Bu, bir "JaxWsPortProxyFactoryBean" fasulye uzak bir bağlantı noktası için bir proxy göstermek üzere yapılandırılmış bir Bahar tabanlı web uygulamasıydı.

<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", web uygulamasını barındıran Tomcat örneğinin "setenv.sh" öğesinde yapılandırılmış bir ortam değişkenidir. Dosyanın içeriği şuna benzer:

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

Kayıp ";" Her satırdan sonra hatalı biçimlendirilmiş URL'ye ve dolayısıyla kötü yanıta neden oldu. Yani, "BusinessAppServices / OurService? Wsdl" yerine URL'nin "/" karakterinden önce bir CR'si vardı. "TCP / IP Monitor" sorunu giderirken oldukça kullanışlıdır.


0

Benim durumumda kullandığım API XML veya JSON biçiminde veri döndürebildiğinden bu hatayı aldım. Bir tarayıcı kullanarak test ettiğimde, varsayılan olarak XML biçimine ayarlandı, ancak aynı çağrıyı bir Java uygulamasından çağırdığımda, API doğal olarak bir ayrıştırma hatasını tetikleyen JSON biçimli yanıtı döndürdü.


0

Ben bile benzer bir sorunla karşılaşmıştım. Nedeni dosyanın başlangıcında bazı çöp karakterdi.

Düzeltme: Sadece dosyayı bir metin düzenleyicisinde açın (Yüce metin üzerinde test edilmiştir) dosyadaki herhangi bir girintiyi kaldırın ve dosyanın tüm içeriğini yeni bir dosyaya yapıştırın ve kaydedin. Bu kadar!. Yeni dosyayı çalıştırdığımda herhangi bir ayrıştırma hatası olmadan çalıştı.


0

Dineshkumar kodunu aldım ve XML dosyamı doğrulamak için değiştirdim:

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);
	}
	
}

}


0

Belgenizi aşağıdaki gibi oluşturacak şekilde ayarlayın:

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

0

Bahar ile aynı sorunu yaşadım

MarshallingMessageConverter

ve ön işlem koduyla.

Mayby birisi neden gerekecek: BytesMessage #readBytes - okuma bayt .. ve ben okuma bir yön operasyonu unuttum. İki kez okuyamazsınız.


0

Apache.commons.io içinde BOMInputStream ile deneyin:

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();
}

0

Macimdeki info.plistdosyayı ayrıştırırken aynı sorunu yaşıyordum . Ancak, dosyayı XML'ye dönüştüren aşağıdaki komut kullanılarak sorun giderildi.

plutil -convert xml1 info.plist

Umarım birine yardım eder.


0

Bazı XML dosyaları ile aynı sorunu vardı, ANSI kodlama (Windows-1252) ile dosya okuma ve Python küçük bir komut dosyası ile UTF-8 kodlama ile bir dosya yazma çözüldü. Notepad ++ kullanmayı denedim ama başarılı olamadım:

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()
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.