답변:
브라우저와 편집기가 ISO-8859-1 / Windows-1252 대신 UTF-8 인코딩을 사용하고 있는지 확인하십시오.
또는을 사용하십시오 ’
.
그래서 무엇이 문제입니까?
그것은의 ’
( 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 양식 제출 값입니다.
다음은 문제에 대한 자세한 정보를 제공하는 링크입니다.
나는 일부 문서가 …
로 보여주는데 …
과 ê
같이 표시했습니다 ê
. 이것이 어떻게 도착했는지 (파이썬 코드) :
# 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)에서도 동일한 문제가 발생할 수 있습니다.
’
(유니 코드 코드 포인트 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로 처리 될 때 생성하기 위해 브라우저가 실제로 수신하는 바이트 입니다.
즉, 소스 데이터는 브라우저로 전송되기 전에 두 가지 문자 집합 변환 이 진행됩니다 .
소스 ’
문자 ( U+2019
)는 먼저 UTF-8 바이트로 인코딩됩니다.
0xE2 0x80 0x99
그런 다음 이러한 개별 바이트는 Windows-125X 문자 집합 중 하나 (1252, 1254, 1256 및 1258이 모두로 매핑 됨 ) 중 하나에 의해 잘못 해석 되고 유니 코드 코드 포인트 U+00E2 U+20AC U+2122
로 디코딩 된 다음 해당 코드 포인트가 UTF-8 바이트로 인코딩됩니다.0xE2 0x80 0x99
U+00E2 U+20AC U+2122
0xE2
-> U+00E2
-> 0xC3 0xA2
0x80
-> U+20AC
-> 0xE2 0x82 0xAC
0x99
-> U+2122
->0xE2 0x84 0xA2
2 단계에서 추가 변환이 수행되는 위치를 찾아서 제거해야합니다.
문자열이 Windows-1252에서 UTF-8로 두 번 변환 될 때 가끔 발생합니다 .
우리는 Zend / PHP / MySQL 응용 프로그램에서 데이터베이스에 문자가 나타나는데 아마도 MySQL 연결이 올바른 문자 세트를 지정하지 않았기 때문입니다. 우린 그래야했다:
Zend 및 PHP가 UTF-8로 데이터베이스와 통신하고 있는지 확인하십시오 ( 기본적으로 는 아님 ).
이와 같은 여러 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 ’
문자 인코딩이 일치하지 않습니다. 문자열은 하나의 인코딩 (UTF-8)으로 인코딩 되며이 페이지를 해석하는 것은 다른 것을 사용합니다 (ASCII).
항상 http 헤더에 인코딩을 지정하고 프레임 워크의 인코딩 정의와 일치하는지 확인하십시오.
샘플 http 헤더 :
Content-Type text/html; charset=utf-8
<configuration>
<system.web>
<globalization
fileEncoding="utf-8"
requestEncoding="utf-8"
responseEncoding="utf-8"
culture="en-US"
uiCulture="de-DE"
/>
</system.web>
</configuration>
누군가 WordPress 웹 사이트에서이 오류가 발생하면 wp-config db 문자 세트를 변경해야합니다.
define('DB_CHARSET', 'utf8mb4_unicode_ci');
대신에:
define('DB_CHARSET', 'utf8mb4');
'-'문자 (긴 빼기 부호)로도 같은 일이 일어났습니다.
이 간단한 교체를 사용 했으므로 해결하십시오.
htmlText = htmlText.Replace('–', '-');