標籤歸檔:漢字編碼

mysql不能儲存生僻漢字?試試utf8mb4字符集

今天發現存進mysql的數據部分丟失了。發現丟失的都是一些生僻的漢字。我這個mysql使用的是utf8字符集,之前一直以為不會發生這種問題,今天才看到了。而且這個問題很早就存在了。這是mysql的一個bug,它的UTF-8字符集只能存儲3字節字符,而有部分生僻的漢字是4個字節的,存入時就會出錯:

ActiveRecord::StatementInvalid: Mysql::Error: Incorrect string value: ‘\xF0\x90\x8D\x83\xF0\x90…’ for column ‘content’ at row 1

上面的官方bug頁面說要到mysql6.0才會解決。其實這個問題在mysql 5.5就解決了。5.5或以上的mysql都可以通過使用utf-16或utf8mb4等字符集解決這個問題。

不過使用ruby on rails的話可能需要一些額外的設置

發表在 信息處理 | 標籤為 , , , , , | 留下評論

再談Nginx Rewrite, 中文URL和其它

上次談到過Nginx和中文URL的問題,這幾天又加深了認識。 多分享幾個關於Nginx Rewrite的經驗。

Nginx匹配指定中文URL的方法:

rewrite "(*UTF8)^\x{66f4}\x{6539}$" /index.html last;

這個會將 http://www.cslog.cn/%E6%9B%B4%E6%94%B9 重定向到http://www.cslog.cn/index.html。
‘/%E6%9B%B4%E6%94%B9′是中文URL ‘/更改’, \x{66f4}\x{6539}是這兩個漢字的Unicode編碼。

注意配合PCRE 7.9以上版本使用,詳細看Nginx和中文URL的問題
繼續閱讀

發表在 信息處理, 站長文檔 | 標籤為 , , , , , , , , , , , , , | 一條評論

Nginx、PCRE和中文URL(UTF8編碼)rewrite路徑重寫匹配問題

最近遇到了使用Nginx 重寫中文UTF8編碼路徑的問題。 才發現默認情況下Nginx的rewrite是不支持UTF8匹配的。 比如:

rewrite ^/(..)$ /2個字符文章.html break; #用2個點
可以匹配到 /ab 或 /51, 但 /漢字 是匹配不到的。 我測試了一下, 要匹配兩個字的 /漢字 路徑, 得用

rewrite ^/(……)$ /2個漢字文章.html break; #要用六個點

如果要讓 ^/(..)$ 匹配到2個漢字字符,得開啟Nginx對UTF8字符的正則支持, 準確點說是開啟Nginx使用的PCRE庫的對UTF8字符的支持。因為Nginx的rewrite模塊是調用PCRE來處理正則的。 如果PCRE沒有問題,Nginx支持UTF8編碼的重寫樣式是:

rewrite "(*UTF8)^/(..)$" /2個字符文章.html break;
#注意(*UTF8)前綴和引號的加入。

繼續閱讀

發表在 信息處理, 站長文檔 | 標籤為 , , , , , , , , , , , , , | 2 條評論

中文文件名編碼和html文件訪問

之前用windows服務器, 上面的有中文名的html文件。 為了保證訪問, 鏈接到這些文件的URL做了中文編碼處理。 那時使用的是ASP寫的, 編碼用的是GB2312. 最近想把這個網站搬到linux服務器上. 將文件上傳到linux服務器後發現原來的鏈接訪問不到中文html文件. 到後來才想到自己linux系統上默認使用的是utf-8編碼文件系統. 後來將FTP軟件設定為GB2312編碼, 重新上傳這些文件後才問題解決了.

發表在 站長文檔 | 標籤為 , | 留下評論