标签归档:汉字编码

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编码, 重新上传这些文件后才问题解决了.

发表在 站长文档 | 标签为 , | 留下评论