utf8_general_ci 的 NodeJS 問題
我有一個帶有聊天系統的網站。這個聊天系統有一個表’messages’,其中一列是’messagetext’設置為utf8_general_ci(MySQL)。在我的網站中,我使用 php 來查詢數據庫。結果沒問題。
在我的應用程序中,我使用 NodeJS 作為後端,但結果是這樣的:“ ασδασδ ”。此列中儲存有希臘詞。
我試過 iconv-lite、iconv、utf8、decode Json。
我的想法是,在網站上,它從列中獲取值 ‘ασδασΒ 並解碼為 utf8,這樣我才能看到正確的結果。但是在應用程序中這並沒有發生,結果是值而不是實際單詞。
我能做些什麼?
(來自評論)
CREATE TABLE messages ( id int(11) NOT NULL AUTO_INCREMENT, sender int(11) NOT NULL, reciever int(11) NOT NULL, seen varchar(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'no', datetime datetime NOT NULL, messagetext text NOT NULL, userseen varchar(3) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL DEFAULT 'no', PRIMARY KEY (id) ) ENGINE=InnoDB AUTO_INCREMENT=94 DEFAULT CHARSET=utf8
node.js 需要這樣的東西開始:
var connection = mysql.createConnection({ ... , charset : 'utf8'});
是的,
ασδασδ
在我看來是希臘語。你所擁有的是“Mojibake”。有關導致 Mojibake 的討論,請參閱https://stackoverflow.com/questions/38363566/trouble-with-utf8-characters-what-i-see-is-not-what-i-stored 。不要使用任何形式的編碼/解碼/轉換——它只會使問題更加複雜。如果該連結對您沒有幫助,請提供它要求的額外詳細資訊。
另請參閱https://www.npmjs.com/package/utf8
表格應提及 utf-8:
<form method="post" action="/your/url/" accept-charset="UTF-8">
分析…
‘Κ’(希臘語 Kappa)是 utf8 中的 2 個字節,十六進制 ‘CE9A’。latin1 中的“Κ”是十六進制“CE9A”(2 個字節)“Κ”,如果轉換為 utf8 是十六進制“C38E C5A1”“ÃŽÅ¡”是解釋為 latin1 時的樣子。
注意:最後一個十六進制是您在評論中顯示的內容。
所以,你似乎有“雙重編碼”。
SELECT CONVERT(BINARY(CONVERT(CONVERT(BINARY(CONVERT('ÃŽÅ¡' USING latin1)) USING utf8mb4) USING latin1)) USING utf8mb4); --> 'Κ'
缺少的是數據流中出現“latin1”的位置。