Więc w czym problem,
Jest to znak ’
( RIGHT SINGLE QUOTATION MARK
- U + 2019), który jest dekodowany jako CP-1252 zamiast UTF-8 . Jeśli sprawdzisz tabelę kodowania , zobaczysz, że ten znak jest w UTF-8 złożony z bajtów 0xE2
, 0x80
a 0x99
. Jeśli zaznaczysz układ strony kodowej CP-1252 , to zobaczysz, że każda z tych bajtów oznaczają poszczególne znaki â
, €
i ™
.
i jak mogę to naprawić?
Użyj UTF-8 zamiast CP-1252 do odczytu, zapisu, przechowywania i wyświetlania znaków.
Mam ustawioną wartość Content-Type na UTF-8 zarówno w moim <head>
tagu, jak i w nagłówkach HTTP:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
To tylko instruuje klienta, jakiego kodowania użyć do interpretacji i wyświetlenia znaków. To nie instruuje twojego własnego programu, jakiego kodowania użyć do odczytu, zapisu, przechowywania i wyświetlania znaków. Dokładna odpowiedź zależy od używanej platformy / bazy danych / języka programowania po stronie serwera. Zwróć uwagę, że ten ustawiony w nagłówku odpowiedzi HTTP ma pierwszeństwo przed metatagiem HTML. Metatag HTML byłby używany tylko wtedy, gdy strona jest otwierana z lokalnego systemu plików, a nie z protokołu HTTP.
Ponadto moja przeglądarka jest ustawiona na Unicode (UTF-8)
:
Wymusza to tylko na kliencie, którego kodowania użyć do interpretacji i wyświetlenia znaków. Ale rzeczywisty problem polega na tym, że już wysyłasz ’
(zakodowane w UTF-8) do klienta zamiast ’
. Klient poprawnie wyświetla obraz ’
przy użyciu kodowania UTF-8. Jeśli klient został błędnie poinstruowany, aby użyć, na przykład ISO-8859-1, prawdopodobnie zobaczyłeś ââ¬â¢
zamiast tego.
Używam ASP.NET 2.0 z bazą danych.
Najprawdopodobniej jest to twój problem. Musisz sprawdzić za pomocą niezależnego narzędzia bazodanowego, jak wyglądają dane.
Jeśli ’
postać tam jest, oznacza to, że nie łączysz się poprawnie z bazą danych. Musisz powiedzieć łącznikowi bazy danych, aby używał UTF-8.
Jeśli twoja baza danych zawiera ’
, to twoja baza danych jest pomieszana. Najprawdopodobniej tabele nie są skonfigurowane do używania UTF-8
. Zamiast tego używają domyślnego kodowania bazy danych, które różni się w zależności od konfiguracji. Jeśli to jest twój problem, zwykle wystarczy zmienić tabelę, aby używała UTF-8. Jeśli Twoja baza danych tego nie obsługuje, musisz ponownie utworzyć tabele. Dobrą praktyką jest ustawienie kodowania tabeli podczas jej tworzenia.
Najprawdopodobniej używasz SQL Server, ale tutaj jest kod MySQL (skopiowany z tego artykułu ):
CREATE DATABASE db_name CHARACTER SET utf8;
CREATE TABLE tbl_name (...) CHARACTER SET utf8;
Jeśli jednak twój stół jest już UTF-8, musisz cofnąć się o krok. Kto lub co umieścił tam dane. Tu jest problem. Jednym z przykładów mogą być wartości przesłane w formularzu HTML, które są nieprawidłowo zakodowane / zdekodowane.
Oto kilka linków, aby dowiedzieć się więcej o problemie: