복붙노트

[JQUERY] 어떻게 자신의 ISO-8859-1 동등한 사용하여 자바 스크립트에 특별한 UTF-8 문자로 변환합니까?

JQUERY

어떻게 자신의 ISO-8859-1 동등한 사용하여 자바 스크립트에 특별한 UTF-8 문자로 변환합니까?

해결법


  1. 1.사실, 모든 것이 일반적 종류 내부적으로 일부 유니 코드로 저장되어 있지만으로 갈 수 있습니다. 나는 당신이 당신의 문자 인코딩 같은 ISO-8859을 사용하고 있기 때문에 당신이 상징적 "à ¥ äö"형식의 문자열을 받고있어 있으리라 믿고있어. 당신이 그 문자를 변환 할 수있는 트릭이있다. 같은 일을 새로운에 encodeURIComponent와 decodeURIComponent는 UTF8 문자에 대해 정의되는 반면 쿼리 문자열을 인코딩 및 디코딩에 사용되는 이스케이프 및 언 이스케이프 기능, ISO 문자에 대해 정의된다.

    사실, 모든 것이 일반적 종류 내부적으로 일부 유니 코드로 저장되어 있지만으로 갈 수 있습니다. 나는 당신이 당신의 문자 인코딩 같은 ISO-8859을 사용하고 있기 때문에 당신이 상징적 "à ¥ äö"형식의 문자열을 받고있어 있으리라 믿고있어. 당신이 그 문자를 변환 할 수있는 트릭이있다. 같은 일을 새로운에 encodeURIComponent와 decodeURIComponent는 UTF8 문자에 대해 정의되는 반면 쿼리 문자열을 인코딩 및 디코딩에 사용되는 이스케이프 및 언 이스케이프 기능, ISO 문자에 대해 정의된다.

    탈출 인코딩 확장 ISO-8859-1 문자 (UTF 코드 포인트 U + 0080-U + 00FF)로서 유이어서이 인코딩 UTF 코드 포인트 U + 0100와 % Uxxxx에 위와 (% 반면 %의 XX (두 자리 16 진수) 4 중 진수로). 예를 들어, 탈출 ( "A") == "% E5"및 탈출 ( "あ") == "%의 u3042".

    에 encodeURIComponent 퍼센트 인코딩은 UTF8 바이트 순서로 문자를 확장했다. 예를 들어,에 encodeURIComponent ( "A") == "%의 C3 %의 A5"및에 encodeURIComponent ( "あ") == "E3 %의 % 81 % 82".

    당신이 할 수 있습니다 :

    fixedstring = decodeURIComponent(escape(utfstring));
    

    예를 들어, 잘못 인코딩 된 문자 "A"는 "Ã를 ¥"가된다. 이 명령은 탈출 단일 바이트로 인코딩이 잘못된 ISO 자입니다 ( "Ã ¥") == "%의 C3 %의 A5"를 수행합니다. 그런 다음 2 % 인코딩 된 바이트는 UTF8 시퀀스로 decodeURIComponent ( "%의 C3 %의 A5") == "A"를 해석되는 곳.

    당신도 작동 어떤 이유에 대한 반대를해야 할 것입니다 경우 :

    utfstring = unescape(encodeURIComponent(originalstring));
    

    나쁜 UTF8 문자열과 ISO 문자열을 구별 할 수있는 방법이 있나요? 이 밝혀졌습니다. 조작 된 인코딩 시퀀스가 ​​주어진다면 위에서 사용 decodeURIComponent 기능에서 오류가 발생한다. 우리는 우리의 문자열이 UTF8 또는 ISO인지 큰 확률로 검출이를 사용할 수 있습니다.

    var fixedstring;
    
    try{
        // If the string is UTF-8, this will work and not throw an error.
        fixedstring=decodeURIComponent(escape(badstring));
    }catch(e){
        // If it isn't, an error will be thrown, and we can assume that we have an ISO string.
        fixedstring=badstring;
    }
    

  2. 2.문제는 페이지까지 제공되면, 내용이 콘텐츠 형식의 메타 태그에 설명 된 인코딩 될 것입니다 것입니다. "잘못"인코딩의 콘텐츠는 이미 왜곡되어있다.

    문제는 페이지까지 제공되면, 내용이 콘텐츠 형식의 메타 태그에 설명 된 인코딩 될 것입니다 것입니다. "잘못"인코딩의 콘텐츠는 이미 왜곡되어있다.

    당신은 페이지를 제공하기 전에 서버에서이 작업을 수행하는 것이 가장입니다. 아니면 내가 알고 말을이었다 같이 UTF-8 엔드 - 투 - 엔드 또는 다이.


  3. 3.에 ISO-8859-1로 변환하는 방법에 대한 질문 때문에 UTF-8 때문에 내가 여기에 내 솔루션을 게시거야이 하나의 폐쇄된다.

    에 ISO-8859-1로 변환하는 방법에 대한 질문 때문에 UTF-8 때문에 내가 여기에 내 솔루션을 게시거야이 하나의 폐쇄된다.

    당신이 XMLHttpRequest.responseType는 "텍스트"또는 비어있는 경우 XMLHttpRequest.response는의 DOMString로 변환하고 그의 물건은 해체되었고, XMLHttpRequest를 사용하여 무엇을 GET 할 때 문제입니다. 후, 그 문자열을 안정적으로 작동 거의 불가능하다.

    서버에서 콘텐츠를 ISO-8859-1 인 경우 지금, 당신은 유형 "물방울"로 응답을 강제 이후의 DOMString이 변환해야합니다. 예를 들면 :

    var ajax = new XMLHttpRequest();
    ajax.open('GET', url, true);
    ajax.responseType = 'blob';
    ajax.onreadystatechange = function(){
        ...
        if(ajax.responseType === 'blob'){
            // Convert the blob to a string
            var reader = new window.FileReader();
            reader.addEventListener('loadend', function() {
               // For ISO-8859-1 there's no further conversion required
               Promise.resolve(reader.result);
            });
            reader.readAsBinaryString(ajax.response);
        }
    }
    

    마법 그래서 아마 누군가가 왜이 작품에 도움이 되거 수 readAsBinaryString에 일어나고있는 것 같다.


  4. 4.내부적으로, 자바 스크립트 문자열은 모든 유니 코드 (실제로는 UCS-2, UTF-16의 부분 집합)이다.

    내부적으로, 자바 스크립트 문자열은 모든 유니 코드 (실제로는 UCS-2, UTF-16의 부분 집합)이다.

    콘텐츠 유형 : 당신이 AJAX를 통해 개별적으로 JSON을 파일을 검색하는 경우, 당신은 단지 확인 JSON 파일이 올바른 콘텐츠 유형과 캐릭터 세트와 함께 제공되어 있는지 확인해야합니다 응용 프로그램 / JSON; 캐릭터 = "UTF-8"). 당신이 할 경우, jQuery를 이미 당신이 직렬화 개체에 액세스하는 시간에 의해 적절하게 해석해야합니다.

    당신은 JSON 객체를 검색하는 데 사용하는 코드의 예를 게시 할 수 있을까요?


  5. 5.자바 스크립트에서 문자 집합 변환을 수행 라이브러리가있다. 당신이 뭔가 간단 원한다면,이 기능은 당신이 원하는 약을 수행합니다

    자바 스크립트에서 문자 집합 변환을 수행 라이브러리가있다. 당신이 뭔가 간단 원한다면,이 기능은 당신이 원하는 약을 수행합니다

    function stringToBytes(text) {
      const length = text.length;
      const result = new Uint8Array(length);
      for (let i = 0; i < length; i++) {
        const code = text.charCodeAt(i);
        const byte = code > 255 ? 32 : code;
        result[i] = byte;
      }
      return result;
    }
    

    당신의 Blob에 결과 바이트 배열을 변환 할 경우, 당신은 이런 식으로 뭔가를 할 것이다 :

    const originalString = 'ååå';
    const bytes = stringToBytes(originalString);
    const blob = new Blob([bytes.buffer], { type: 'text/plain; charset=ISO-8859-1' });
    

    지금과 같은 여기에서 설명하는 일부 응용 프로그램이 UTF-8 인코딩을 수용 할 것을 염두에 두어야하지만, 당신이 BOM 문자를 앞에 추가하지 않는 한 그들은 인코딩을 추측 할 수 있습니다.


  6. 6.당신은 당신의 페이지 이상이 줄을 추가해야합니다

    당신은 당신의 페이지 이상이 줄을 추가해야합니다

    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    
  7. from https://stackoverflow.com/questions/5396560/how-do-i-convert-special-utf-8-chars-to-their-iso-8859-1-equivalent-using-javasc by cc-by-sa and MIT license