it-swarm.com.de

"-" wird auf Seite statt "'" angezeigt

’ Wird auf meiner Seite anstelle von ' Angezeigt.

Ich habe den Content-Type In meinem UTF-8 - Tag und in meinen HTTP-Headern auf <head> Gesetzt:

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

enter image description here

Außerdem ist mein Browser auf Unicode (UTF-8) eingestellt:

enter image description here

Was ist das Problem und wie kann ich es beheben?

115
Jitendra Vyas

Stellen Sie sicher, dass der Browser und der Editor die UTF-8-Codierung anstelle von ISO-8859-1/Windows-1252 verwenden.

Oder benutze &rsquo;.

51
kennytm

Also, was ist das Problem,

Es ist ein ( RIGHT SINGLE QUOTATION MARK - U + 2019) Zeichen, das als CP-1252 anstelle von TF) codiert wurde -8 . Wenn Sie die Tabelle Kodierungen überprüfen, sehen Sie, dass dieses Zeichen in UTF-8 aus den Bytes 0xE2, 0x80 Und 0x99 Besteht. Wenn Sie das CP-1252-Codepage-Layout markieren, werden Sie feststellen, dass jedes dieser Bytes für die einzelnen Zeichen â, Und .


und wie kann ich das beheben?

Verwenden Sie UTF-8 anstelle von CP-1252 zum Lesen, Schreiben, Speichern und Anzeigen der Zeichen.


Ich habe den Inhaltstyp sowohl in meinem <head> - Tag als auch in meinen HTTP-Headern auf UTF-8 gesetzt:

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

Dies weist den Client nur an, welche Codierung zur Interpretation und Anzeige der Zeichen verwendet werden soll. Dies weist Ihr eigenes Programm nicht an, welche Codierung zum Lesen, Schreiben, Speichern und Anzeigen der Zeichen verwendet werden soll. Die genaue Antwort hängt von der verwendeten serverseitigen Plattform/Datenbank/Programmiersprache ab. Beachten Sie, dass der im HTTP-Antwortheader festgelegte Wert Vorrang vor dem HTML-Metatag hat. Das HTML-Metatag wird nur verwendet, wenn die Seite nicht über HTTP, sondern über das lokale Festplattendateisystem geöffnet wird.


Außerdem ist mein Browser auf Unicode (UTF-8) eingestellt:

Dies erzwingt nur, dass der Client die Kodierung verwendet, um die Zeichen zu interpretieren und anzuzeigen. Das eigentliche Problem ist jedoch, dass Sie bereits ’ (In UTF-8 codiert) anstelle von An den Client senden. Der Client zeigt ’ Mit der UTF-8-Codierung korrekt an. Wenn der Client falsch angewiesen wurde, beispielsweise ISO-8859-1 zu verwenden, hätten Sie wahrscheinlich stattdessen ââ¬â¢ Gesehen.


Ich verwende ASP.NET 2.0 mit einer Datenbank.

Hier liegt höchstwahrscheinlich Ihr Problem. Sie müssen mit einem unabhängigen Datenbanktool überprüfen, wie die Daten aussehen.

Wenn das Zeichen Vorhanden ist, stellen Sie keine korrekte Verbindung zur Datenbank her. Sie müssen den Datenbank-Connector anweisen, UTF-8 zu verwenden.

Wenn Ihre Datenbank ’ Enthält, ist Ihre Datenbank durcheinander. Höchstwahrscheinlich sind die Tabellen nicht für die Verwendung von UTF-8 Konfiguriert. Stattdessen verwenden sie die Standardcodierung der Datenbank, die je nach Konfiguration variiert. Wenn dies Ihr Problem ist, ist es in der Regel ausreichend, nur die Tabelle für die Verwendung von UTF-8 zu ändern. Wenn Ihre Datenbank dies nicht unterstützt, müssen Sie die Tabellen neu erstellen. Es wird empfohlen, die Codierung der Tabelle beim Erstellen festzulegen.

Sie verwenden höchstwahrscheinlich SQL Server, aber hier ist etwas MySQL-Code (kopiert aus dieser Artikel ):

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

Wenn Ihre Tabelle jedoch bereits UTF-8 ist, müssen Sie einen Schritt zurücktreten. Wer oder was hat die Daten dort abgelegt. Hier liegt das Problem . Ein Beispiel wären von HTML-Formularen übermittelte Werte, die falsch codiert/decodiert sind.


Hier einige weitere Links, um mehr über das Problem zu erfahren:

199
BalusC

Ich habe einige Dokumente, in denen wurde angezeigt als … und ê wurde angezeigt als ê. So kam es dahin (Python-Code):

# 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

Um das Problem zu beheben, habe ich python Code wie folgt verwendet:

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)

(Da jemand die Twingled-Version in ein korrektes UTF-8-Dokument eingefügt hatte, musste ich eigentlich nur den Twingled-Teil extrahieren, entflechten und wieder einfügen. Ich habe dafür BeautifulSoup verwendet.)

Es ist weitaus wahrscheinlicher, dass Sie einen Charlie bei der Inhaltserstellung haben, als dass die Webserverkonfiguration falsch ist. Sie können Ihren Webbrowser auch zwingen, die Seite zu verändern, indem Sie die Windows-1252-Codierung für ein UTF-8-Dokument auswählen. Ihr Webbrowser kann das von Charlie gespeicherte Dokument nicht entflechten.

Hinweis: Das gleiche Problem kann bei jeder anderen Einzelbyte-Codepage (z. B. Latin-1) anstelle von Windows-1252 auftreten.

14
Terrel Shumway

(Unicode-Codepoint U+2019 RIGHT SINGLE QUOTATION MARK) Ist in UTF-8 als Byte codiert:

0xE2 0x80 0x99.

’ (Unicode-Codepunkte U+00E2 U+20AC U+2122) Ist in UTF-8 als Byte codiert:

0xC3 0xA20xE2 0x82 0xAC0xE2 0x84 0xA2.

Dies sind die Bytes, die Ihr Browser tatsächlich empfängt, um ’ Zu erzeugen, wenn er als UTF-8 verarbeitet wird.

Das bedeutet, dass Ihre Quelldaten zwei Zeichensatzkonvertierungen durchlaufen, bevor sie an den Browser gesendet werden:

  1. Das Quellzeichen (U+2019) Wird zuerst als UTF-8-Byte codiert:

    0xE2 0x80 0x99

  2. diese einzelnen Bytes wurden dann falsch interpretiert und von einem der Windows-125X Zeichensätze (1252, 1254, 1256 in Unicode-Codepunkte U+00E2 U+20AC U+2122 dekodiert , und 1258 ordnen alle 0xE2 0x80 0x99U+00E2 U+20AC U+2122) zu, und dann werden diese Codepunkte als UTF-8-Bytes codiert:

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

Sie müssen herausfinden, wo die zusätzliche Konvertierung in Schritt 2 ausgeführt wird, und sie entfernen.

11
Remy Lebeau

Dies passiert manchmal, wenn ein String konvertiert wird von Windows-1252 nach UTF-8 zweimal.

Wir hatten dies in einer Zend/PHP/MySQL-Anwendung, in der solche Zeichen in der Datenbank erschienen, wahrscheinlich weil die MySQL-Verbindung nicht den richtigen Zeichensatz angab. Wir mussten:

  1. Stellen Sie sicher, dass Zend und PHP mit der Datenbank in UTF-8 kommunizierten (war nicht ​​standardmäßig)

  2. Repariere die kaputten Zeichen mit mehreren SQL-Abfragen wie folgt ...

    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);
    

    Tun Sie dies für so viele Tabellen/Spalten wie nötig.

Sie können einige dieser Zeichenfolgen auch in PHP falls erforderlich) korrigieren. Beachten Sie, dass wir eine umgekehrte Konvertierung durchführen müssen, da die Zeichen zweimal codiert wurden von UTF-8 zurück zu Windows-1252, was mich zuerst verwirrte.

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

Ihre Zeichenkodierung stimmt nicht überein. Ihre Zeichenfolge ist in einer Codierung (UTF-8) codiert, und was auch immer diese Seite interpretiert, verwendet eine andere (z. B. ASCII).

Geben Sie Ihre Kodierung immer in Ihren http-Headern an und stellen Sie sicher, dass diese mit der Kodierungsdefinition Ihres Frameworks übereinstimmt.

Beispiel für einen http-Header:

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

Codierung in asp.net einstellen

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

Kodierung in jsp einstellen

8
David Waters

Wenn Ihr Inhaltstyp bereits UTF8 ist, gehen die Daten wahrscheinlich bereits in der falschen Codierung ein. Wenn Sie die Daten aus einer Datenbank abrufen, stellen Sie sicher, dass die Datenbankverbindung UTF-8 verwendet.

Wenn dies Daten aus einer Datei sind, stellen Sie sicher, dass die Datei korrekt als UTF-8 codiert ist. Normalerweise können Sie dies im Dialogfeld "Speichern unter ..." des Editors Ihrer Wahl einstellen.

Wenn die Daten beim Anzeigen in der Quelldatei bereits fehlerhaft sind, handelt es sich wahrscheinlich um eine UTF-8-Datei, die jedoch unterwegs in der falschen Codierung gespeichert wurde.

7
Pekka 웃

Wenn jemand diese Fehlermeldung auf WordPress website bekommt, müssen Sie den wp-config db charset ändern:

define('DB_CHARSET', 'utf8mb4_unicode_ci');

anstatt:

define('DB_CHARSET', 'utf8mb4');
4