ColdFusion으로 생성 된 XML 파일에서 UTF-8이 아닌 문자를 지원할 수 없습니다.

SpyderScript

ColdFusion 2018을 실행하는 서버에서 다음 코드를 실행할 때 :

<cfsetting enablecfoutputonly="yes">

<cfxml variable="test">
    <cfoutput>
        <test>
            áéíóú
        </test>
    </cfoutput>
</cfxml>

<cfset testString = ToString(test)>

<cfset testStringISO = Replace(testString, "UTF-8", "iso-8859-1")>

<cffile action="write" file="#AbsoluteFilesPath#test.xml" output="#testStringISO#" charset="iso-8859-1">

AbsoluteFilesPath서버의 위치에 대한 절대 참조는 어디에 있습니까 ? XML 인코딩을 변경하는 데 사용하는 방법은 여기에 있습니다 . test.xml내가 ++ 메모장에서 서버를 열고이 같은 파일 외모 :

<?xml version="1.0" encoding="iso-8859-1"?>
<test>
    αινσϊ
</test>

파일 인코딩은 "ISO 8859-7"로 표시됩니다.

흥미롭게도 로컬 컴퓨터에서 VSCode로 파일을 열면 다음과 같이 표시됩니다.

<?xml version="1.0" encoding="iso-8859-1"?>
<test>
    �����
</test>

여기서 파일의 인코딩은 "UTF-8"로 표시됩니다. 편집기에서 "ISO 8859-1 인코딩으로 다시 열기"명령을 선택하면 파일이 다음과 같이 표시됩니다.

<?xml version="1.0" encoding="iso-8859-1"?>
<test>
    áéíóú
</test>

"iso-8859-1"을 "utf-16"으로 대체하여이 코드를 테스트했으며 결과는 동일합니다.

파일 인코딩이 일관성이없고 예상 한 것과 다른 이유는 무엇입니까? 파일이 올바른 인코딩으로 생성되었는지 어떻게 확인할 수 있습니까?

알렉스

먼저 무엇인가를 명확히합시다 encoding. XML 파일 속성은 독자를위한 지표 일뿐입니다. 실제 파일에 기록 된 바이트에는 영향을주지 않습니다.

따라서 예제 코드를 단일 문자로 단순화 해 보겠습니다 á.

덤프

UTF-8은 2 바이트를 저장하고 ISO-8859-1은 1 바이트를 저장합니다. 이것이 우리가 기대하는 것입니다.

예제 코드

<cfsetting enablecfoutputonly="true">

<cfxml variable="test">
    <cfoutput><r>á</r></cfoutput>
</cfxml>

<cfset xmlForUTF = toString(test)>
<cfset xmlForISO = replace(xmlForUTF, 'encoding="UTF-8"', 'encoding="ISO-8859-1"')>

<cfset fileWrite(expandPath("UTF-8.xml"),      xmlForUTF, "UTF-8")>
<cfset fileWrite(expandPath("ISO-8859-1.xml"), xmlForISO, "ISO-8859-1")>

결과 파일

UTF-8.xml

utf

ISO-8859-1.xml

iso

이것이 바로 우리가 기대했던 것입니다. 어느 쪽 cfxmlcffile/ fileWrite문제 없다. 그렇다면 컴퓨터에서 위의 코드로 동일한 결과를 얻지 못할 수있는 이유는 무엇입니까?

문제 : 페이지 인코딩

ColdFusion은 템플릿 파일 ( .cfm)과 구성 요소 파일 ( .cfc)을 구문 분석 할 때 JVM의 기본 인코딩을 사용합니다.이 인코딩은 달리 지정하지 않는 한 시스템의 기본 인코딩입니다. 이것은 또한 모든 사람이 위의 코드로 다른 결과를 얻을 수있는 이유이기도합니다.

á파일에서 와 같은 리터럴이있는 경우이 문자는 텍스트 편집기에서 사용하도록 지정한 것을 사용하여 인코딩됩니다. 그것이 UTF-8. 파일을 살펴보면 캐릭터가 제대로 저장되어있는 것을 볼 수 있습니다. 그러나 ColdFusion에서이 파일을 열고 리터럴을 구문 분석 할 때 문자가 시스템의 기본 인코딩으로 인코딩 된 것으로 간주합니다. 그리고 불행히도 시스템 전체 코드 세트로 UTF-8을 사용하지 않거나 사용할 수없는 시스템을 실행하는 것 같습니다 (예 : Windows).

솔루션

그것을 해결하는 (추악한) 방법

cfprocessingdirective

그것을 해결하는 (해키) 방법

ColdFusion이 파서 (모든 .cfm/ .cfc파일) 와 접촉하는 모든 파일을 BOM이있는 UTF-8 로 저장 합니다. ColdFusion에서 파일 시작 부분에서 이러한 바이트를 발견하면 BOM이 의미하는 바가 있기 때문에 UTF-8을 사용해야합니다.

이를 해결하는 글로벌 방법

-Dfile.encoding=UTF-8ColdFusion JVM에 추가 합니다. 매개 변수는 여기에 추가 할 수 있습니다 /cfusion/bin/jvm.config(행 : java.args=)

이를 위해서는 ColdFusion을 다시 시작해야합니다. 그런 다음 모든 파일을 BOM없이 간단한 UTF-8로 저장할 수 있으며 제대로 작동합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

XML 파일의 일부가 아닌 for-each에서 생성 된 로컬 변수를 저장해야합니다.

분류에서Dev

XML 파일의 일부가 아닌 for-each에서 생성 된 로컬 변수를 저장해야합니다.

분류에서Dev

관리자가 아닌 파일 이름에서 '.Move'로 실행 파일을 실행할 수 없습니다.

분류에서Dev

페이지 제목에 UTF-8로 인코딩 된 문자를 사용할 수 있습니까?

분류에서Dev

C : Windows 용으로 컴파일 할 때 유니 코드 점자를 UTF-8 문서에 쓸 수 없습니다.

분류에서Dev

테이블에서 동적으로 생성 된 열에 스타일을 지정할 수 없습니다.

분류에서Dev

en_US.UTF-8 로케일을 생성 할 수 없습니다.

분류에서Dev

잘못된 스키마,이 스키마 소스 XSD에서 XML 데이터를 생성 할 수 없습니다.

분류에서Dev

js.erb 파일에서 생성 된 객체는 페이지로드시 .js 파일에서 사용할 수 없지만 개발 도구에 있습니다.

분류에서Dev

ASP : utf-8에서 iso-8859-1로 일부 문자를 디코딩 할 수 없습니다.

분류에서Dev

iMacro는 PHP에서 생성 된 이미지를 다운로드 할 수 없습니다.

분류에서Dev

UTF-8 파일의 특수 문자를 ANSI로 변환 할 수 없습니다.

분류에서Dev

Python, Google Places API- "잘못된 요청입니다. 입력 매개 변수 중 하나에 UTF-8이 아닌 문자열이 있습니다."

분류에서Dev

잘못된 UTF8 문자 jms / serializer-bundle symfony가 포함되어 있으므로 데이터를 인코딩 할 수 없습니다.

분류에서Dev

파일 경로가 아닌 바이트 배열에서 THREE.Texture를 구성 할 수 있습니까?

분류에서Dev

Spring이 ApplicationContext xml 파일에서 클래스를로드 할 수 없습니다.

분류에서Dev

로컬에서 무시 된 파일이 원격에서 업데이트되었습니다. 지금 원격 지점으로 체크 아웃 할 수 없습니다.

분류에서Dev

XML 파일에서 유효하지 않은 UTF8이 아닌 문자를 건너 뛰거나 제거하는 방법

분류에서Dev

byte []로 생성 된 이미지를 표시 할 수 없습니다.

분류에서Dev

동적으로 생성 된 탭에 datagridview를 추가 할 수 없습니다.

분류에서Dev

동적으로 생성 된 HTML에서 자바 스크립트 함수를 호출 할 수 없습니다.

분류에서Dev

동적으로 생성 된 앵커 태그에 클릭 이벤트를 추가 할 수 없습니다.

분류에서Dev

/ checkout / 'QuerySet'개체의 AttributeError에 'id'속성이 없습니다. 자동으로 생성 된 'id 모델에 액세스 할 수 없습니다.

분류에서Dev

런타임 환경이 구성된 것으로 보이지 않기 때문에 Encore.setOutputPath ()를 아직 호출 할 수 없습니다.

분류에서Dev

GIT 저장소에서 새로 생성 된 분기를 체크 아웃 할 수 없습니다.

분류에서Dev

PHP를 사용하여 파일을 ANSI에서 UTF-8로 변환 할 수 없습니다.

분류에서Dev

jquery 모바일에서 동적으로 생성 된 버튼 텍스트를 변경할 수 없습니다.

분류에서Dev

ASCII가 아닌 문자를 xml / UTF-8에 쓰기

분류에서Dev

getWindowManager (). addView에서 생성 된 뷰를 애니메이션 할 수 없습니다.

Related 관련 기사

  1. 1

    XML 파일의 일부가 아닌 for-each에서 생성 된 로컬 변수를 저장해야합니다.

  2. 2

    XML 파일의 일부가 아닌 for-each에서 생성 된 로컬 변수를 저장해야합니다.

  3. 3

    관리자가 아닌 파일 이름에서 '.Move'로 실행 파일을 실행할 수 없습니다.

  4. 4

    페이지 제목에 UTF-8로 인코딩 된 문자를 사용할 수 있습니까?

  5. 5

    C : Windows 용으로 컴파일 할 때 유니 코드 점자를 UTF-8 문서에 쓸 수 없습니다.

  6. 6

    테이블에서 동적으로 생성 된 열에 스타일을 지정할 수 없습니다.

  7. 7

    en_US.UTF-8 로케일을 생성 할 수 없습니다.

  8. 8

    잘못된 스키마,이 스키마 소스 XSD에서 XML 데이터를 생성 할 수 없습니다.

  9. 9

    js.erb 파일에서 생성 된 객체는 페이지로드시 .js 파일에서 사용할 수 없지만 개발 도구에 있습니다.

  10. 10

    ASP : utf-8에서 iso-8859-1로 일부 문자를 디코딩 할 수 없습니다.

  11. 11

    iMacro는 PHP에서 생성 된 이미지를 다운로드 할 수 없습니다.

  12. 12

    UTF-8 파일의 특수 문자를 ANSI로 변환 할 수 없습니다.

  13. 13

    Python, Google Places API- "잘못된 요청입니다. 입력 매개 변수 중 하나에 UTF-8이 아닌 문자열이 있습니다."

  14. 14

    잘못된 UTF8 문자 jms / serializer-bundle symfony가 포함되어 있으므로 데이터를 인코딩 할 수 없습니다.

  15. 15

    파일 경로가 아닌 바이트 배열에서 THREE.Texture를 구성 할 수 있습니까?

  16. 16

    Spring이 ApplicationContext xml 파일에서 클래스를로드 할 수 없습니다.

  17. 17

    로컬에서 무시 된 파일이 원격에서 업데이트되었습니다. 지금 원격 지점으로 체크 아웃 할 수 없습니다.

  18. 18

    XML 파일에서 유효하지 않은 UTF8이 아닌 문자를 건너 뛰거나 제거하는 방법

  19. 19

    byte []로 생성 된 이미지를 표시 할 수 없습니다.

  20. 20

    동적으로 생성 된 탭에 datagridview를 추가 할 수 없습니다.

  21. 21

    동적으로 생성 된 HTML에서 자바 스크립트 함수를 호출 할 수 없습니다.

  22. 22

    동적으로 생성 된 앵커 태그에 클릭 이벤트를 추가 할 수 없습니다.

  23. 23

    / checkout / 'QuerySet'개체의 AttributeError에 'id'속성이 없습니다. 자동으로 생성 된 'id 모델에 액세스 할 수 없습니다.

  24. 24

    런타임 환경이 구성된 것으로 보이지 않기 때문에 Encore.setOutputPath ()를 아직 호출 할 수 없습니다.

  25. 25

    GIT 저장소에서 새로 생성 된 분기를 체크 아웃 할 수 없습니다.

  26. 26

    PHP를 사용하여 파일을 ANSI에서 UTF-8로 변환 할 수 없습니다.

  27. 27

    jquery 모바일에서 동적으로 생성 된 버튼 텍스트를 변경할 수 없습니다.

  28. 28

    ASCII가 아닌 문자를 xml / UTF-8에 쓰기

  29. 29

    getWindowManager (). addView에서 생성 된 뷰를 애니메이션 할 수 없습니다.

뜨겁다태그

보관