org.xml.sax.SAXParseException : 프롤로그에서 컨텐츠를 사용할 수 없습니다


161

Java 기반 웹 서비스 클라이언트가 Java 웹 서비스에 연결되어 있습니다 (Axis1 프레임 워크에서 구현 됨).

로그 파일에 다음과 같은 예외가 발생합니다.

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
구문 분석하려는 XML을 보여 주면 도움이 될 것입니다. (처음 몇 줄만 할 것입니다.)
Stephen C

감사합니다 Stephen, AXIS 프레임 워크에서 XML 요청을 검색하여 여기에 붙여 넣으려고합니다. 따라서 위의 오류에 대한 일반적인 이해는 XML이 제대로 구성되지 않았다는 것입니다.
ag112

xml 파일 대신 xml 파일의 문자열 이름을 문자열로 변환하려고했기 때문에이 문제가 발생했습니다! : P
Gaʀʀʏ

답변:


242

이것은 종종 XML 선언 전에 공백으로 인해 발생하지만 대시 나 문자와 같은 텍스트 일 수 있습니다 . 사람들이 공백을 항상 무시할 수 있다고 가정하기 때문에 공백으로 인해 종종 발생한다고 말합니다.하지만 여기서는 그렇지 않습니다.


자주 발생하는 또 다른 한가지는 것입니다 UTF-8 BOM (바이트 순서 표시) 되는 XML 선언이 공백으로 처리하기 전에 문서를 XML 파서에 문자의 스트림로서가 아닌 바이트 스트림으로 넘겨 경우 허용 .

스키마 파일 (.xsd)을 사용하여 xml 파일의 유효성을 검사하고 스키마 파일 중 하나에 UTF-8 BOM 이있는 경우에도 마찬가지 입니다.


17
변화 : w00te의 제안 - 나 같은 사람을 위해, 누가 존 험프리 수행 할 작업을 이해하는 투쟁 Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))Document document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
RealMan

32

Yuriy Zubarev의 게시물 외에도 실제로

존재하지 않는 xml 파일을 파서에 전달할 때 예를 들어 당신은 통과

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

파일 시스템에 C : /temp/abc.xml 파일 만 존재하는 경우

두 경우 모두

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

또는

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

모두 같은 오류 메시지가 나타납니다.

다음 추적 때문에 매우 실망스러운 버그

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

'파일 이름이 잘못되었습니다'또는 '이러한 파일이 존재하지 않습니다'라는 사실에 대해서는 아무 말도하지 않습니다. 제 경우에는 xml 파일을 완전히 수정했으며 실제 문제를 확인하는 데 2 ​​일이 걸렸습니다.


파일 이름 FWIW 대신 디렉토리를 구문 분석하는 것과 동일합니다.
rogerdpack

... @Egor 이것이 모두가 XML을 싫어하는 이유입니다. 그러한 어리석은 실패로 2 일의 일을 잃는 것 ..
Gewure

물론 2012 년부터 고대 포스트이었다 @Gewure이 : 나는 그것에 대해 잊지 동의하지만, 사실
에고

1
올바른 경로가 있지만 다음과 같은 특수 기호가있는 경우에도 발생합니다. C : \ # MyFolder \ My.XML 파일이 있지만 "#"은 XML 파서에 문제를 가져옵니다 ... Java 자체는 물론 M $ Windows,이 폴더 이름에 문제가 없습니다 .... 매우 잘못된 예외 메시지 동작 ....
Alex

26

encoding="UTF-8"프롤로그 의 문자열과 종료 사이에 공백을 추가하십시오 ?>. XML에서 프롤로그는 문서 시작시이 괄호로 묶인 물음표로 구분 된 요소를 지정합니다 (스택 오버플로의 태그 프롤로그는 프로그래밍 언어를 참조 함).

추가 : 문서의 프롤로그 부분 앞에 대시가 있습니까? 프롤로그 앞에 데이터가 있으면 오류가 발생 -<?xml version="1.0" encoding="UTF-8"?>합니다.


1
+1. XML 프롤로그에 공백이 포함되어 있어도 일부 XML 파서 가이 예외를 피할 수 있다는 것을 알았습니다 <?xml ver.... 따라서 비트 앞에 아무것도 없는지 확인하는 것이 좋습니다.

11

freemarker로 XML 문서를 구문 분석하는 동안 동일한 문제가 발생했습니다.

XML 파일 헤더 앞에 공백이 없었습니다.

파일 인코딩과 XML 인코딩 속성이 다른 경우에만 문제가 발생합니다 . (예 : 헤더에 UTF-16 속성이있는 UTF-8 파일).

그래서 두 가지 방법으로 문제를 해결했습니다.

  1. 파일 자체의 인코딩 변경
  2. 헤더 UTF-16을 UTF-8로 변경

1
일반적으로 파서가 문자 인코딩에 대한 충돌 정보를 수신하는 경우이 문제가 발생할 수 있다고 생각합니다.
Raedwald

9

XML이 잘못되었거나 응답 본문이 XML 문서가 아님을 의미합니다.


확인하고 XML이 잘 구성된 것처럼 보입니다. 다음은 스냅 샷입니다 .- <? 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 : Security xmlns : wsse =" docs.oasis-open.org/wss/2004/01/… " soapenv : mustUnderstand = "1"> .... </ wsse : Security> </ soapenv : Header> <soapenv : Body> .XX .. </ soapenv : Body> </ soapenv : Envelope>
ag112

1
예, 앞에 대시가 있으면 XML이 손상됩니다.
Yuriy Zubarev 님이

7

WSDL에서 비슷한 문제를 추적하기 위해 4 시간을 보냈습니다. 다른 네임 스페이스 XSD를 가져 오는 XSD를 사용하는 WSDL이 밝혀졌습니다. 가져온 XSD에는 다음이 포함되어 있습니다.

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

include요소에 주목하십시오 ! 이것이 내 재앙의 뿌리였습니다. 나는 이것이 위의 Egor 파일에서 찾을 수없는 문제의 변형이라고 생각합니다.

실망스러운 오류보고 +1


4

필자의 경우 'encoding = "UTF-8"'특성을 모두 제거했습니다.

파일이 실제로 UTF-8이 아니기 때문에 문자 세트 인코딩 문제처럼 보입니다.


4

내 대답은 아마 도움이되지 않지만 일반적 으로이 문제에 도움이됩니다.

이런 종류의 예외가 표시되면 16 진 편집기에서 xml 파일을 열려고 시도하고 때로는 텍스트 편집기에 표시되지 않는 파일의 시작 부분에 추가 바이트를 볼 수 있습니다.

그것들을 삭제하면 XML이 파싱됩니다.


4

때로는 XML이 아닌 코드입니다.

다음 코드

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

이 오류가 발생합니다.

[치명적 오류] : 1 : 1 : 내용이 prolog.org.xml.sax.SAXParseException에서 허용되지 않습니다. lineNumber : 1; columnNumber : 1; 프롤로그에는 콘텐츠가 허용되지 않습니다.

파일 "file.xml"의 내용이 아닌 문자열 리터럴을 구문 분석하려고 시도 하고 문자열이 제대로 구성된 XML이 아니기 file.xml때문에 실패 "file.xml"합니다.

수정 : 제거 StringReader():

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

마찬가지로 더티 버퍼 문제는 실제 XML보다 잔여 정크를 남길 수 있습니다. XML을주의 깊게 검사 한 후에도이 오류가 계속 발생하면 정확한 내용을 파서에 전달하십시오. 때때로 실제로 시도되고있는 것이 놀랍습니다.


1
이 솔루션 applicaionContext.xml은 코드에 경로 를 추가하는 것을 잊었을 때 올바른 경로로 안내되었으며 코드를 체크인하지 않고 XML 파일에서만 오류를 찾고있었습니다
Mrinmoy

3

먼저 프로젝트를 정리 한 다음 프로젝트를 다시 빌드하십시오. 나는 또한 같은 문제에 직면했다. 그 후 모든 것이 잘되었습니다.


2

다른 모든 방법이 실패하면 파일을 바이너리로 열어 파일 시작 부분에 재미있는 문자 [파일 시작 부분에 파일을 utf-8로 식별하는 3 개의 인쇄 할 수없는 문자]가 없는지 확인하십시오. 우리는 이것을하고 일부를 발견했습니다. 그래서 우리는 파일을 utf-8에서 ascii로 변환했으며 작동했습니다.


2

같은 문제에 대해 다음 줄을 제거했습니다.

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

잘 작동합니다. 왜 UTF-8이 문제를 일으키는 지 잘 모르겠습니다. 충격을 주려면 UTF-8에서도 잘 작동합니다.

사용하고 윈도우 7 * jdk1.6.0_13 * 자바 32 비트 및 넷빈즈 IDE를. 어떻게 작동하는지 모르겠습니다.


2

Mike Sokolov가 이미 지적했듯이 가능한 이유 중 하나는 태그 앞에 일부 문자 (예 : 공백)가 있기 때문입니다.

입력 XML을 바이트 배열이 아닌 문자열로 읽는 경우 입력 문자열을 아래 코드로 바꾸어 xml 태그 전에 모든 '필요하지 않은'문자를 지울 수 있습니다.

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

입력 xml이 xml 태그로 시작하는지 확인해야합니다.


2

내 경우에는 삭제 한 후에도 응용 프로그램 의 web.xml 에 여분의 공간이 생겨서 chage와 수정 사항을 되돌려 야했고 예 , 내 바람둥이에서 logging.propertiesweb.xml 을 가지고 놀고 있었지만 오류가 계속 표시되어 수정되었습니다)).

여분의 공간

구체적으로 org.apache.catalina.filters.ExpiresFilter.level = FINE 스택을 플로우에 대한 로깅을 추가하려고했습니다.


1

나는 여기에 있는 지침을 따르고 같은 오류가 발생했습니다.

메모장과 XML 메모장에서 인코딩을 변경하고 복사하여 붙여 넣는 대신 XML 파일을 입력하는 등 여러 가지 방법으로 시도했지만 아무것도 작동하지 않았습니다.

메모장에서 XML 파일을 편집하고 저장할 때 문제가 해결되었습니다. ++ (BOM이없는 인코딩-> utf-8)


1

이 오류가 발생하는 모든 경우 : 경고 : conf / server.xml을 사용하여 Catalina.start : 프롤로그에 내용이 허용되지 않습니다.

그다지 유익하지는 않습니다. 그러나 이것이 실제로 의미하는 것은 conf / server.xml 파일에 가비지가 있다는 것입니다.

다른 XML 파일에서이 정확한 오류를 보았습니다.이 오류는 가비지를 소개하는 텍스트 편집기로 변경하여 발생할 수 있습니다.

파일에 가비지가 있는지 여부를 확인할 수있는 방법은 "HEX 편집기"로 파일을 여는 것입니다.이 문자열 앞에 문자가 있으면

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

이 쓰레기처럼

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

문제는 .... 해결책은 훌륭한 HEX 편집기를 사용하는 것입니다. 다른 유형의 인코딩으로 파일을 저장할 수있는 방법입니다.

그런 다음 UTF-8로 저장하십시오. XML 파일을 사용하는 일부 시스템에서는 UTF NO BOM으로 저장해야 할 수 있습니다. "NO Byte Order Mark"

이것이 누군가를 도울 수 있기를 바랍니다!


1

나를 위해, Build-> Clean은 모든 것을 고쳤습니다 !


1

Unix / Linux 시스템에서 BOM 문제를 해결하려면 다음을 수행하십시오.

  1. 원치 않는 BOM 문자가 있는지 확인 : hexdump -C myfile.xml | more 파일 시작 부분에 원치 않는 BOM 문자가 다음과 같이 나타납니다....<?xml>

  2. 또는을 수행하십시오 file myfile.xml. BOM 문자가 포함 된 파일은 다음과 같이 나타납니다.myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text

  3. 다음을 사용하여 단일 파일을 수정하십시오. tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml

  4. 파일이 위생 처리되었는지 확인하려면 1 또는 2를 반복하십시오. 아마도 view myfile.xml내용을 확인하는 것이 합리적 이었습니다.

XML 파일의 전체 폴더를 삭제하는 bash 스크립트는 다음과 같습니다.

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

미래에 대한 이것에 대한 추가 생각. 이 버그가 발생하면 활성 디스플레이로 XML 창이 있고주의를 기울이지 않을 때 삭제 키 또는 다른 키를 무작위로 누르는 경우 일 수 있습니다. 내 웹 응용 프로그램에서 struts.xml 파일을 사용하여 이전에 이런 일이 발생했습니다. 서투른 팔꿈치 ...


나는 어떤 키도
누르지

0

나는 또한 같은 것을 받고 있었다

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

내 응용 프로그램이 RestFull 웹 서비스 호출에 대한 XML 응답을 만들 때. XML 형식 문자열을 만드는 동안 & lt 및 & gt를 <및>으로 바꾸면 오류가 발생하고 적절한 응답을 얻었습니다. 어떻게 작동했는지 확실하지 않지만 작동했습니다.

샘플 :

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

0

나는 같은 문제가 있었다.

먼저 XML 파일을 로컬 데스크톱으로 다운로드했고 Content is not allowed in prolog파일을 포털 서버로 가져 오는 동안 받았습니다 . 시각적으로 보이는 파일조차도 나에게 좋아 보이지만 어떻게 든 손상되었습니다.

그래서 나는 같은 파일을 다시 다운로드하고 똑같이 시도해 보았습니다.


0

최근에 같은 문제가 발생하여 URL이 잘못되어 표준 403 HTTP 응답 (클라이언트가 찾고 있던 유효한 XML이 아님) 인 것으로 나타났습니다. 동일한 컨텍스트 내의 누군가 가이 문제에 부딪 칠 경우 세부 사항을 공유 할 것입니다.

이것은 "JaxWsPortProxyFactoryBean"Bean이 원격 포트에 대한 프록시를 노출하도록 구성된 Spring 기반 웹 애플리케이션입니다.

<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"은 웹 애플리케이션을 호스팅하는 Tomcat 인스턴스의 "setenv.sh"에 구성된 환경 변수입니다. 파일 내용은 다음과 같습니다.

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

잃어버린 ";" 각 줄이 잘못된 URL로 인해 응답이 잘못되었습니다. 즉, "BusinessAppServices / OurService? wsdl"대신 URL에 "/"앞에 CR이 있습니다. "TCP / IP 모니터"는 문제를 해결하는 동안 매우 편리했습니다.


0

필자의 경우 API를 사용하여 XML 또는 JSON 형식으로 데이터를 반환 할 수 있기 때문에이 오류가 발생했습니다. 브라우저를 사용하여 테스트했을 때 기본값은 XML 형식이지만 Java 응용 프로그램에서 동일한 호출을 호출하면 API가 JSON 형식의 응답을 반환하여 자연스럽게 구문 분석 오류가 발생했습니다.


0

나는 비슷한 문제에 직면했다. 파일의 시작 부분에 약간의 가비지 문자가있었습니다.

수정 : 텍스트 편집기에서 파일을 열고 (Sublime 텍스트에서 테스트 됨) 파일에 들여 쓰기가 있으면 들여 쓰기를 제거하고 파일의 모든 내용을 새 파일에 붙여 넣고 저장하십시오. 그게 다야!. 새 파일을 실행할 때 구문 분석 오류없이 실행되었습니다.


0

Dineshkumar 코드를 가져 와서 XML 파일을 올바르게 확인하도록 수정했습니다.

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

문서를 다음과 같이 설정하십시오.

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

0

나는 봄과 같은 문제가 있었다

MarshallingMessageConverter

사전 절차 코드로.

Mayby 누군가 이유가 필요합니다 : BytesMessage #readBytes-reading bytes .. 나는 독서가 한 방향 조작이라는 것을 잊었습니다. 두 번 읽을 수 없습니다.


0

apache.commons.io에서 BOMInputStream을 사용해보십시오.

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

info.plist내 Mac 에서 파일 을 구문 분석하는 동안 동일한 문제가 발생했습니다 . 그러나 파일을 XML로 바꾸는 다음 명령을 사용하여 문제가 해결되었습니다.

plutil -convert xml1 info.plist

누군가에게 도움이되기를 바랍니다.


0

일부 XML 파일에서 동일한 문제가 발생하여 ANSI 인코딩 (Windows-1252)으로 파일을 읽고 Python에서 작은 스크립트로 UTF-8 인코딩으로 파일을 작성하는 문제를 해결했습니다. 메모장 ++를 사용해 보았지만 성공하지 못했습니다.

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()
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.