2012-08-19 2 views
6

) RETS Server에서 데이터를 가져 오기 위해 librets를 사용하고 있습니다. 어떻게 든 librets 인코딩 방법이 작동하지 않고 출력물에 이상한 문자가 나타납니다. 나는 '' '와 같은 문자가 â € ™로 바뀌 었음을 알아 챘다. 나는 데이터를 다운로드 한 후에 그러한 쓰레기 characeters를 실제 값으로 대체하기로 결정하여 librets에 대한 수정을 찾을 수 없습니다. 내가 필요로하는 것은 그러한 가비지 문자열과 그와 동등한 문자 목록입니다. 나는 이것에 대한 봤지만 어떤 리소스를 찾을 수 없습니다. 누구든지 그러한 쓰레기 편지와 실제 값 목록 또는 그러한 편지를 생성 할 수있는 코드 조각을 가리킬 수 있습니까? 용어 "UTF-8"에 대한가비지 문자 목록 (예 :

고맙습니다

답변

10

검색, 그건 당신이보고있는 무엇 때문입니다.

UTF-8은 유니 코드 문자를 일련의 바이트로 나타내는 방법입니다. ("유니 코드 문자"는 모든 언어로 사용되는 문자와 기호의 전체 범위입니다.) 일반적으로 한 유니 코드 문자는 UTF-8에서 1, 2 또는 3 바이트가됩니다. Windows에서 일반적으로 사용하는 문자 세트를 사용하여 해당 바이트 (0에서 255까지의 숫자)를 표시하면 "가비지"로 표시됩니다.이 경우 3 개의 "가비지 문자"가 실제로 UTF-8 인코딩의 3 바이트입니다 .

예에서 스마트 인용 문자 으로 시작했습니다. 유니 코드의 표현은 숫자 이거나 U + 2019 (2019는 8217의 16 진수)입니다. (유니 코드 문자와 그 번호의 전체리스트를 검색 "Unicode".) 번호 8217의 UTF-8로 표현 세 바이트 시퀀스 226이다 128, 153 . Windows "CP-1252"문자 인코딩 (미국의 Windows에서 텍스트를 표시하는 일반적인 방법)을 사용하여 문자로 3 바이트를 표시하면 ’으로 나타납니다. (바이트 및 문자의 테이블을 보려면 "CP-1252"을 검색하십시오.)

나는 당신을위한 어떤 목록이 없습니다. 그러나 유니 코드와 UTF-8을 기본적으로 지원하는 언어로 프로그램을 작성한 경우에는 하나를 만들 수 있습니다. 내가 할 수있는 것은 당신이보고있는 것을 설명하는 것입니다.

librets가 다운로드 할 때 UTF-8을 사용하도록 지시하는 방법이 있으면 문제가 자동으로 해결 될 수 있습니다. 나는 librets에 관해서는 아무 것도 모르지만 이제는 "UTF-8"이라는 용어를 알았으므로 진전을 이룰 수있을 것이다. 질문 알림

+2

+1 Concur and emphasize : 대부분 서버가 올바른 일을하고 있으며 코드 또는 도구를 수정해야합니다. 가장 간단한 경우에는 CP-1252 또는 ISO-8859-1 대신 UTF-8을 표시하도록 결과를 검사하는 데 사용하는보기 도구를 구성하는 것만으로도 충분합니다. – tripleee

+0

동의 함. Internet Explorer와 같은 웹 브라우저를 사용하여 출력을 보는 경우 간단한 메뉴 옵션을 사용하여 문자 세트를 변경할 수 있습니다. ("보기"로 이동하여 "인코딩"을 선택한 다음 "서유럽 어 (Windows)"에서 "UTF-8"로 변경하십시오. "자동 선택"옵션을 해제 할 수도 있습니다.) 인코딩이 설정된 경우 UTF-8로 변환하면 Internet Explorer는 3 개의 "가비지 문자"를 가져와 UTF-8 바이트로 해석하고 다시 유니 코드 문자로 변환하고 유니 코드 문자를 표시합니다. 이 경우, librets는 변경할 필요가 없습니다. 출력을 보는 방식을 바꿀뿐입니다. 설명을 위해 – librik

+0

고맙습니다. LIBRETS는 인코딩을 재정의하는 방법을 제공하지만 작동하지 않는 것처럼 보입니다. Librets 포럼은 애처롭지 만 등록 된 사용자를 승인하지 않고 한 달 후에도 승인하지 않으면 누구나 질문을 게시 할 수 없습니다. – ZafarYousafi

0

:.

은 "... 나는 '' '와 같은 문자를 눈치가 â의 €의 ™로 대체 ... 내가 데이터를 다운로드 한 후 실제 값으로 같은 쓰레기 characeters 교체 하기로 결정 무엇 그런 가비지 문자열 목록과 해당 문자가 필요합니다. "

은 엄격하게이 부분을 다루는 : ". 내가 필요로하는 등 쓰레기 문자열과 동등한 문자 목록은"

PHP를 사용하면 이러한 문자 및 이와 동등한 문자를 생성 할 수 있습니다. 1,111,998 개의 모든 유니 코드 포인트 또는 109,449 개의 Utf8 기호로 작업하는 것은 비실용적입니다. 다음 루프에서 ASCII 범위를 & # 128 및 & # 258 사이 또는 컨텍스트와 관련성이있는 다른 범위로 사용할 수 있습니다.

<?php 
    for ($i=128; $i<258; $i++) 
    $tmp1 .= "<tr><td>".htmlentities("&#$i;")."</td><td>".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."</td><td>&#".$i.";</td></tr>"; 

    echo "<table border=1> 
    <tr><td>&#</td><td>&quot;Garbage&quot;</td><td>symbol</td></tr>"; 
    echo $tmp1; 
    echo "</table>"; 
?> 

경험에서, 아스키 맥락에서, 대부분의 "쓰레기"기호는 범위 & # 128 # 8246 & 8129에 # (드물게) & + 257 # &에를 기원.

"가비지"기호를 표시하려면 html 페이지 문자 세트를 iso-1 또는 처음부터 문제를 일으킨 다른 문자 세트로 설정해야합니다. charset이 utf-8로 설정된 경우에는 표시되지 않습니다.

<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 

.

는에 당신은 실제로 더 "쓰레기"를 만들 것입니다 PHP는 utf8_decode()와 "쓰레기"를 실행 취소 할 수 없습니다

"나는 데이터를 다운로드 한 후 실제 값 와 같은 쓰레기 characeters을 교체하기로 결정" 이미 "쓰레기". 그러나 간단하고 빠른 검색을 사용하고 php str_replace() 함수를 대체 할 수 있습니다.

먼저 교체하려는 "가비지"기호의 각 세트에 대해 2 개의 배열을 생성하십시오. 지금, 당신은 당신이 복사 사용 붙여 청소 재사용 할 수 2 개 배열을 가지고

<?php 
    //Adapt for your relevant range. 
    $tmp2 = "\$ReplaceArr = array(\n"; 
    for ($i=128; $i<258; $i++) 
    $tmp2 .= "\"&#".$i.";\", "; 
    $tmp2 = substr($tmp2,0,strlen($tmp2)-2);//erases last comma 
    $tmp2 .= ");"; 

    echo $tmp1."\n<br><br>\n"; 
    echo $tmp2."\n"; 
?> 

:

<?php 
    //ISO 8859-1 (Latin-1) special chars are found in the range 128 to 257 
    $tmp1 = "\$SearchArr = array("; 
    for ($i=128; $i<258; $i++) 
    $tmp1 .= "\"".html_entity_decode("&#".$i.";",ENT_NOQUOTES,"utf-8")."\", "; 
    $tmp1 = substr($tmp1,0,strlen($tmp1)-2);//erases last comma 
    $tmp1 .= ");"; 
    $tmp1 = htmlentities($tmp1,ENT_NOQUOTES,"utf-8"); 
?> 

두 번째 배열이 대체 용어입니다 : 첫 번째 배열은 검색 용어입니다 이처럼 감염 문자열 중 하나를

$InfectedString = str_replace($SearchArr,$ReplaceArr,$InfectedString); 

참고 : utf8_decode()는 "쓰레기"문자 정화 전혀 도움이됩니다. 그러나 더 이상의 오염을 방지하기 위해 사용될 수 있습니다. mb_ 함수가 유용 할 수도 있습니다.

관련 문제