SQL Server unterstützt utf-8
Zeichenfolgen nicht. Wenn Sie mit anderen Zeichen als plain-latin umgehen müssen, wird dringend empfohlen, NVARCHAR
anstelle von VARCHAR
mit einer arabischen Sortierung zu verwenden.
Viele Leute denken, dass NVARCHAR
utf-16
ist, während VARCHAR
utf-8
ist. Das ist nicht wahr! Die zweite ist erweitertes ASCII und verwendet in jedem Fall 1 Byte, während utf-8
einige Zeichen mit mehr als einem Byte codiert.
Also - die wichtigste Frage ist: WARUM?
SQL Server die Zeichenfolge in eine NVARCHAR
Variable annehmen kann, muss er in einem Kette von Bytes und es in die ehemalige Zeichenfolge wieder Stimmen:
DECLARE @str NVARCHAR(MAX)=N'(نماینده اراک)';
SELECT @str
,CAST(@str AS VARBINARY(MAX))
,CAST(CAST(@str AS VARBINARY(MAX)) AS NVARCHAR(MAX));
Das Problem mit dem )
ist - sehr wahrscheinlich ! - dass Ihre arabischen Buchstaben von rechts nach links sind, während die )
von links nach rechts ist. Ich wollte das Ergebnis der Abfrage oben in diese Antwort einfügen, schaffte es aber nicht, den abschließenden )
an den ursprünglichen Ort zu bringen ...Sie versuchen zu bearbeiten, zu löschen, zu ersetzen, aber Sie bekommen etwas anderes ... Irgendwie lustig, aber nicht eine Frage der schlechten Codierung aber einer der fehlerhaften Editoren ...
Egal, SQL-Server ist nicht Ihr Problem. Sie müssen die Zeichenfolge als NVARCHAR
aus SQL-Server lesen. C# arbeitet mit Unicode-Strings und nicht mit einer kollationierten 1-Byte-Zeichenfolge. Jede Umwandlung hat die Chance, deinen Text zu zerstören.
Wenn Ihr Ziel (oder der Tooltip Sie uns zeigen) nicht in der Lage ist, die Zeichenfolge richtig zu zeigen, könnte es vollkommen in Ordnung, aber der Editor nicht ...
Wenn Sie eine solche UTF-8 passieren String zurück zu SQL-Server, erhalten Sie eine Sauerei ...
Der einzige Ort, wo UTF-8 sinnvoll ist, wird in eine Datei geschrieben oder über kleine Band übertragen. Wenn ein Text sehr viele einfache lateinische Zeichen und nur ein paar seltsame Buchstaben (wie oft XML, HTML) enthält, können Sie ziemlich viel Speicherplatz oder Band mit speichern. Mit einem fernöstlichen Text würden Sie sogar Ihren Text aufblähen. Einige dieser Zeichen benötigen 3 oder sogar 4 Bytes, um codiert zu werden.
Innerhalb Ihrer Datenbank und Anwendung sollten Sie mit Unicode bleiben.
"Sie funktionieren nicht" ist zu vage, so dass es nicht möglich ist, Ihnen zu helfen. Könnten Sie genaue Beispiele für Eingabe und Ausgabe geben (bearbeiten Sie die Frage). – miroxlav
Eingabe: (نماينده اراک) آآاي قاسمي Ausgabe: (??????? ????) ???? ????? –