" '"대신 페이지에 "â € ™"표시


133

’대신 내 페이지에 표시됩니다 '.

나는이 Content-Type에 세트를 UTF-8내 모두 <head>태그 내 HTTP 헤더 :

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

여기에 이미지 설명을 입력하십시오

또한 내 브라우저는 다음으로 설정되어 있습니다 Unicode (UTF-8).

여기에 이미지 설명을 입력하십시오

문제가 무엇이며 어떻게 해결할 수 있습니까?


답변:


55

브라우저와 편집기가 ISO-8859-1 / Windows-1252 대신 UTF-8 인코딩을 사용하고 있는지 확인하십시오.

또는을 사용하십시오 &rsquo;.


75
아니요, 해결되지 않았습니다. 응용 프로그램의 문자 인코딩에 여전히 불일치가 있습니다. CP1252 이외의 다른 문자에 대해서는 나중에 동일한 문제가 다시 발생합니다. 그리고 많은 것들이 있습니다 ...
BalusC

12
계속 발생하는 문자의 예 : i18nqa.com/debug/utf8-debug.html
Zoot

utf-8 encoding +1
Karuhanga

217

그래서 무엇이 문제입니까?

그것은의 ( RIGHT SINGLE QUOTATION MARK- 2,019 U +)로 디코딩되는 문자 CP-1252 대신 UTF-8 . 당신이 선택하면 인코딩의 테이블을, 당신은이 문자는 UTF-8 바이트의 구성에 볼 0xE2, 0x80그리고 0x99. 당신이 선택하면 CP-1252 코드 페이지 레이아웃을 , 당신은 그 바이트의 각 개별 문자 서 것을 볼 수 있습니다 â, 그리고 .


어떻게 고칠 수 있습니까?

문자를 읽고 쓰고 저장하고 표시하려면 CP-1252 대신 UTF-8을 사용하십시오.


<head>태그와 HTTP 헤더 모두에서 Content-Type을 UTF-8로 설정했습니다 .

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

이것은 클라이언트에게 문자를 해석하고 표시하는 데 사용할 인코딩을 지시합니다. 이것은 문자를 읽고, 쓰고, 저장하고, 표시하기 위해 어떤 인코딩을 사용할지 자신의 프로그램에 지시하지 않습니다. 정확한 대답은 사용 된 서버 측 플랫폼 / 데이터베이스 / 프로그래밍 언어에 따라 다릅니다. HTTP 응답 헤더에 설정된 것이 HTML 메타 태그보다 우선합니다. HTML 메타 태그는 페이지가 HTTP가 아닌 로컬 디스크 파일 시스템에서 열린 경우에만 사용됩니다.


또한 내 브라우저는 다음으로 설정되어 있습니다 Unicode (UTF-8).

이것은 클라이언트가 문자를 해석하고 표시하는 데 사용할 인코딩 만 강제합니다. 그러나 실제 문제는 이미 ’UTF-8로 인코딩 된 대신 클라이언트로 보내는 것입니다 . 클라이언트는 ’UTF-8 인코딩을 사용하여 올바르게 표시 됩니다. 클라이언트가 ISO-8859-1과 같이 잘못 사용하도록 지시받은 경우 대신 보셨을 ââ¬â¢것입니다.


데이터베이스와 함께 ASP.NET 2.0을 사용하고 있습니다.

이것은 아마도 문제가있는 곳입니다. 독립 데이터베이스 도구를 사용하여 데이터의 모양을 확인해야합니다.

경우 문자가, 당신은 제대로 데이터베이스에 연결되지 않습니다. UTF-8을 사용하려면 데이터베이스 커넥터에 지시해야합니다.

데이터베이스에가 포함되어 있으면 데이터베이스가 ’엉망입니다. 대부분의 테이블은을 사용하도록 구성되어 있지 않습니다 UTF-8. 대신 데이터베이스의 기본 인코딩을 사용하며 구성에 따라 다릅니다. 이것이 문제라면 일반적으로 UTF-8을 사용하도록 테이블을 변경하는 것으로 충분합니다. 데이터베이스가이를 지원하지 않으면 테이블을 다시 작성해야합니다. 테이블을 작성할 때 테이블의 인코딩을 설정하는 것이 좋습니다.

SQL Server를 사용하고있을 가능성이 있지만 다음은 이 기사 에서 복사 한 일부 MySQL 코드입니다 .

CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;

그러나 테이블이 이미 UTF-8 인 경우 한 발짝 물러서야합니다. 누가 또는 무엇을 거기에 데이터를 넣었습니까. 그것이 문제가있는 곳입니다. 한 가지 예는 잘못 인코딩 / 디코딩 된 HTML 양식 제출 값입니다.


다음은 문제에 대한 자세한 정보를 제공하는 링크입니다.


2
이 같은 어딘가에 저장된 내용이 mysql 데이터베이스와 같이 저장된 경우 stackoverflow.com/a/9407998/117647 에 문자를 utf-8로 변환하는 데 필요한 트릭이 있습니다
Steve

5
TL; DR; UTF-8을 사용하여 문자를 읽고 쓰고 저장하고 표시하십시오.
c0degeas

iso-8859-1 및 Windows-1252 테이블이 겹치므로 일부 "이상한 문자 조합"은 두 가지 모두에 공통입니다 (예 : "é"는 "Ã ©").
Skippy le Grand Gourou

15

나는 일부 문서가 로 보여주는데 …ê같이 표시했습니다 ê. 이것이 어떻게 도착했는지 (파이썬 코드) :

# Adam edits original file using windows-1252
windows = '\x85\xea' 
# that is HORIZONTAL ELLIPSIS, LATIN SMALL LETTER E WITH CIRCUMFLEX

# Beth reads it correctly as windows-1252 and writes it as utf-8
utf8 = windows.decode("windows-1252").encode("utf-8")
print(utf8)

# Charlie reads it *incorrectly* as windows-1252 writes a twingled utf-8 version
twingled = utf8.decode("windows-1252").encode("utf-8")
print(twingled)

# detwingle by reading as utf-8 and writing as windows-1252 (it's really utf-8)
detwingled = twingled.decode("utf-8").encode("windows-1252")

assert utf8==detwingled

문제를 해결하기 위해 다음과 같이 파이썬 코드를 사용했습니다.

with open("dirty.html","rb") as f:
    dt = f.read()
ct = dt.decode("utf8").encode("windows-1252")
with open("clean.html","wb") as g:
    g.write(ct)

(누군가 트위 글링 된 버전을 올바른 UTF-8 문서에 삽입했기 때문에 실제로 트위 글링 된 부분 만 추출하고 디트 윙 글링 한 다음 다시 삽입해야했습니다. BeautifulSoup을 사용했습니다.)

웹 서버 구성이 잘못되어있는 것보다 컨텐츠 작성에 Charlie가있을 가능성이 훨씬 높습니다. utf-8 문서에 대해 Windows-1252 인코딩을 선택하여 웹 브라우저가 페이지를 반짝이게 할 수도 있습니다. 웹 브라우저는 Charlie가 저장 한 문서를 뒤섞을 수 없습니다.

참고 : Windows-1252 대신 다른 1 바이트 코드 페이지 (예 : latin-1)에서도 동일한 문제가 발생할 수 있습니다.


14

(유니 코드 코드 포인트 U+2019 RIGHT SINGLE QUOTATION MARK)는 UTF-8로 바이트로 인코딩됩니다.

0xE2 0x80 0x99.

’(유니 코드 코드 포인트 U+00E2 U+20AC U+2122)는 UTF-8로 바이트로 인코딩됩니다.

0xC3 0xA2   0xE2 0x82 0xAC   0xE2 0x84 0xA2.

’UTF-8로 처리 될 때 생성하기 위해 브라우저가 실제로 수신하는 바이트 입니다.

즉, 소스 데이터는 브라우저로 전송되기 전에 두 가지 문자 집합 변환 이 진행됩니다 .

  1. 소스 문자 ( U+2019)는 먼저 UTF-8 바이트로 인코딩됩니다.

    0xE2 0x80 0x99

  2. 그런 다음 이러한 개별 바이트는 Windows-125X 문자 집합 중 하나 (1252, 1254, 1256 및 1258이 모두로 매핑 됨 ) 중 하나에 의해 잘못 해석 되고 유니 코드 코드 포인트 U+00E2 U+20AC U+2122로 디코딩 된 다음 해당 코드 포인트가 UTF-8 바이트로 인코딩됩니다.0xE2 0x80 0x99U+00E2 U+20AC U+2122

    0xE2-> U+00E2-> 0xC3 0xA2
    0x80-> U+20AC-> 0xE2 0x82 0xAC
    0x99-> U+2122->0xE2 0x84 0xA2

2 단계에서 추가 변환이 수행되는 위치를 찾아서 제거해야합니다.


12

문자열이 Windows-1252에서 UTF-8로 두 번 변환 될 때 가끔 발생합니다 .

우리는 Zend / PHP / MySQL 응용 프로그램에서 데이터베이스에 문자가 나타나는데 아마도 MySQL 연결이 올바른 문자 세트를 지정하지 않았기 때문입니다. 우린 그래야했다:

  1. Zend 및 PHP가 UTF-8로 데이터베이스와 통신하고 있는지 확인하십시오 ( 기본적으로 는 아님 ).

  2. 이와 같은 여러 SQL 쿼리로 깨진 문자를 복구하십시오 ...

    UPDATE MyTable SET 
    MyField1 = CONVERT(CAST(CONVERT(MyField1 USING latin1) AS BINARY) USING utf8),
    MyField2 = CONVERT(CAST(CONVERT(MyField2 USING latin1) AS BINARY) USING utf8);
    

    필요한만큼 많은 테이블 / 열에 대해이 작업을 수행하십시오.

필요한 경우 PHP에서 이러한 문자열 중 일부를 수정할 수도 있습니다. 문자 인코딩 되었기 때문에 참고 두 번 , 우리가 실제로 역 변환 할 필요 에서 처음에 저를 혼동 윈도우 1252에 UTF-8 백.

mb_convert_encoding('’', 'Windows-1252', 'UTF-8');    // returns ’

9

문자 인코딩이 일치하지 않습니다. 문자열은 하나의 인코딩 (UTF-8)으로 인코딩 되며이 페이지를 해석하는 것은 다른 것을 사용합니다 (ASCII).

항상 http 헤더에 인코딩을 지정하고 프레임 워크의 인코딩 정의와 일치하는지 확인하십시오.

샘플 http 헤더 :

Content-Type    text/html; charset=utf-8

asp.net에서 인코딩 설정

<configuration>
  <system.web>
    <globalization
      fileEncoding="utf-8"
      requestEncoding="utf-8"
      responseEncoding="utf-8"
      culture="en-US"
      uiCulture="de-DE"
    />
  </system.web>
</configuration>

JSP에서 인코딩 설정


7

컨텐츠 유형이 이미 UTF8 인 경우 데이터가 이미 잘못된 인코딩으로 도착했을 수 있습니다. 데이터베이스에서 데이터를 가져 오는 경우 데이터베이스 연결이 UTF-8을 사용하는지 확인하십시오.

파일의 데이터 인 경우 파일이 UTF-8로 올바르게 인코딩되었는지 확인하십시오. 일반적으로 선택한 편집기의 "다른 이름으로 저장 ..."대화 상자에서이를 설정할 수 있습니다.

소스 파일에서 데이터를 볼 때 이미 데이터가 손상된 경우 데이터가 UTF-8 파일 이었지만 그 도중에 잘못된 인코딩으로 저장되었을 수 있습니다.


4

누군가 WordPress 웹 사이트에서이 오류가 발생하면 wp-config db 문자 세트를 변경해야합니다.

define('DB_CHARSET', 'utf8mb4_unicode_ci');

대신에:

define('DB_CHARSET', 'utf8mb4');

0

DBeaver (또는 다른 편집기)에서 작업중인 스크립트 파일은 UTF8로 저장하라는 프롬프트를 표시하고 문자를 변경합니다.

으로

–

또는

–

-1

Word 문서에서 복사 / 붙여 넣기 텍스트가 있어야합니다. Word 문서는 스마트 따옴표를 사용합니다. 특수 문자 (& rsquo;)로 바꾸거나 HTML 편집기 ( ')를 입력하면됩니다.

이것이 귀하의 문제를 해결할 것이라고 확신합니다.


-3

'-'문자 (긴 빼기 부호)로도 같은 일이 일어났습니다.
이 간단한 교체를 사용 했으므로 해결하십시오.

htmlText = htmlText.Replace('–', '-');

4
OP의 문제는 비슷한 유니 코드 문자가 아닌 모모 베이크입니다.
Cole Johnson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.