Heim >Web-Frontend >Front-End-Fragen und Antworten >Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind?

Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind?

藏色散人
藏色散人Original
2023-02-08 10:29:122153Durchsuche

Knoten-utf8-Lösung für verstümmelte chinesische Zeichen: 1. Überprüfen Sie den Typ von „SarchName“ über „typeof“. 2. Verwenden Sie die Methode „Name=iconv.decode(name,‘gbk‘)“, um die Codierung in utf8 zu konvertieren.

Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind?

Die Betriebsumgebung dieses Tutorials: Windows 10-System, Node v14.16.0-Version, DELL G3-Computer

Was tun, wenn chinesische Node-utf8-Zeichen verstümmelt sind?

  • node.js implementiert die Codierungskonvertierung von GBK in UTF8, eine chinesische verstümmelte Lösung.

Bevor ich dies tat, hatte ich ein Bedürfnis, nämlich den Knoten zu verwenden, um eine Fuzzy-Abfrage von Namen durchzuführen. Tatsächlich ist dies eine einfache Angelegenheit, die nicht einfacher sein kann, aber ich war zwei Tage lang mit diesem Thema beschäftigt.

Aus geschäftlichen Gründen haben wir eine Fuzzy-Abfrage für die neue Funktion durchgeführt.

Zuerst musste ich einen Knoten-HTTP-Dienst einrichten und dann MySQL konfigurieren. Nachdem ich das ORM-Modell etabliert hatte, stieß ich auf etwas Seltsames, als ich mit dem Schreiben von SQL-Anweisungen beginnen wollte, da mein Knoten in utf8 codiert war. Die Datenbank unseres Unternehmens verwendet jedoch die GBK-Kodierung, was zu einem Fehler führte, als ich die Datenabfrage durchführte und die Abfrage fehlschlug. Der Grund waren Kodierungsprobleme.

Dieses Problem ist auch sehr einfach, einfach transkodieren! ! !

Als ich anfing, die Transkodierungsmethode des Baidu-Knotens zu verwenden, stieß ich auf das Plugin iconv-jschardet und ging zu npm, um es auszuprobieren. Ich habe angefangen,

const iconv = require('iconv-jschardet');
SarchName =  iconv.encode(SarchName, 'gbk');

zu verwenden, um die vom Frontend gesendeten Zeichen in GBK-Kodierung umzuwandeln, und war sehr zufrieden.

Das Ergebnis ist immer noch ein Fehler. Aufgrund dieses Fehlers habe ich einen Nachmittag damit verbracht, danach zu suchen. Ich weiß nicht, ob die Konvertierung erfolgreich war, daher habe ich unzählige Methoden ausprobiert, konnte dieses Codierungsproblem jedoch immer noch nicht lösen. Deshalb habe ich darüber nachgedacht, es mit SQL in Binärdateien zu konvertieren, um beim Abfragen beim Schreiben von PHP Fuzzy-Matching zu ermöglichen.

Also habe ich den SarchNamen eingegeben und es stellte sich heraus, dass es Obj war. Ich war sehr verwirrt und dachte, es sollte String sein. Also habe ich es ausgedruckt und gesehen, dass es ein Buffer war. Jetzt wurde mir klar, dass es besser ist, es nicht direkt in String zu konvertieren. Ich habe die Methode Buffer.toString() verwendet, aber es hat immer noch nicht funktioniert, und dann habe ich die Dokumentation durchgesehen. Ich fand heraus, dass es keine GBK-Kodierung gab, was große Kopfschmerzen bereitete.

Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind?

Dann habe ich es mit ASCII versucht und festgestellt, dass es immer noch nicht funktioniert, also habe ich es mit Binärdatei versucht und es war in Ordnung.

Was tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind?

** Die Ausführung der Fuzzy-Abfrage wurde problemlos abgeschlossen. Als die zurückgegebenen Daten gefunden wurden, waren sie immer noch in GBK codiert. Das ist ganz einfach! ! ! ! Konvertieren Sie es dann in utf8

Name=iconv.decode(name,'gbk')

und kehren Sie dann zurück und stellen Sie fest, dass es kein Problem gibt. Dann ist alles in Ordnung.

Nach einer Weile entdeckte jemand anderes einen Fehler und sagte, dass der Name der Person nicht vollständig angezeigt wurde! ! ! !

Infolgedessen tauchte dieses Symbol � in den Namen einiger Personen auf. . . . .

Baidu stellte fest, dass die Dekodierung unvollständig war und es derzeit keine Lösung gibt. . .

Am Ende hatte ich keine andere Wahl, als die Methode indexOf('�') zu verwenden, um die seltenen Zeichen in der Zeichenfolge abzurufen

Dann notieren Sie ihren Status und verwenden Sie PHP, um sie zu transkodieren.

Mit einem Wort, Grube! **

Ergänzung: Bei der GBK-Konvertierung von Node.js in utf8 können einige seltene Zeichen immer noch nicht konvertiert werden, was zu verstümmelten Zeichen führt. Es wird empfohlen, dass Bibliotheken mit GBK nicht zulassen, dass Node Dinge wie die chinesische Transkodierung durchführt und in eine andere Sprache wechselt.

Empfohlenes Lernen: „node.js Video-Tutorial

Das obige ist der detaillierte Inhalt vonWas tun, wenn chinesische Knoten-utf8-Zeichen verstümmelt sind?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn