• 30
  • 7月

又是一乱码问题,googleearth图层中显示的中文全部为乱码。解决方法也非常简单:

Tools->Options->3DView->Choose 3D Font换一个中文字体就OK。我选的是Dejavu Sans,出来的是楷体的效果。用文泉驿正黑效果不是很好。

遇到乱码先看字体!

  • 25
  • 6月

最近整理自己的文档时发现了一个问题,在Ubuntu下创建的zip文件内如果包括中文文件名的文件,在Windows下就会乱码,且有可能无法正常解开。同样在Windows下创建的zip文件Linux下也会乱码。显然又是字符编码问题。

经实验7zr格式不存在此问题。而且它又没有版权问题,决定以后用7z打包保存文件。

PS:论坛上说rar没问题,但我用Krusader创建的rar在Windows下也乱码。

  • 31
  • 12月

用Ubuntu听歌时一件事情非常不爽:除audacious外,其他的播放器都不能正确识别歌曲的中文信息。歌曲信息一片乱码。

在看过这篇文章的分析之后,总算明白为什么会乱码了。但作者给的解决方法用起来实在不是很方便。在经过自己一番摸索之后发现其实EasyTAG这个软件可以方便的解决这个问题。

首先从添加/删除程序里找到EasyTAG并安装。选择“设置”-“首选项”,在“浏览”页下将“Default directory”选为你放MP3的那个文件夹,然后在“ID3 Tag Settings”中将“写入ID3 v1.x标签”的Charset设置为“简体中文(gb2312)”;在“Charactor set for reading ID3 tags”中选中“None standard“,并同样设置为“简体中文(gb2312)”。

这样每次打开EasyTag它就会自动扫描默认目录下的所有mp3,退出时只要选择全部保存。再更新一下mp3播放器的播放列表就ok了。

不过在我这里EasyTag有个很奇怪的问题:只要EasyTAG的窗口处在最大化状态,在它的界面里点一下鼠标窗口的标题栏、菜单栏和状态栏就会消失,再点一下就会恢复。不在最大化时就没问题……

  • 17
  • 9月

打装上vim来确实体会到了文本编辑的乐趣。但我装的gvim一直有一个令我气绝的地方:打开utf-8编码的文件,中文居然乱码,弄得完全不可编辑。

最近的一些开发用的文件编码又全都是utf-8。认真读了一下vim的手册,找到了解决方案:

在_vimrc文件中加入以下行:

set fileencodings=ucs-bom,utf-8,chinese

vim就会在使用ansi编码解析文件前尝试ucs-bom、utf-8、chinese这些编码方案。基本可以保证中文能正常显示了。

另外,如果在其中加入以下内容:

set clipboard+=unnamed

还可以将vim的默认缓冲挂到Windows的剪贴版上。这样按y和p键就可以直接实现“复制”和“粘贴”的功能了。

  • 17
  • 3月

在网上搜索了半天得到的东东,还没实验过^_^

三句真言:

SET NAMES utf8;
SET CHARACTER SET utf8;
SET COLLATION_CONNECTION=’utf8_general_ci’;

建立conn时,query一下这三个语句,再进行别的操作。

解释:

有两个语句可以改变connection character set:
1. SET NAMES ‘charset_name’;
2. SET CHARACTER SET charset_name;

SET NAMES告诉服务器客户端将使用什么样的字符集来发送SQL命令,也同时指定服务器返回给客户端所使用的字符集。

SET NAMES ‘x’ 等效于:
SET character_set_client = x;
SET character_set_results = x;
SET character_set_connection = x;
(注: SET character_set_connection = x; 语句同时也自动指定了字符集x的默认collation为 collation_connection的值,但也可以用 SET NAMES ‘charset_name’ COLLATE ‘collation_name’来提定你想使用的collation。)

SET CHARACTER SET和SET NAMES作用相似,但它将连接的字符集和collation设置为默认数据库的字符集和collation。

SET CHARACTER SET x 等效于:
SET character_set_client = x;
SET character_set_results = x;
SET collation_connection = @@collation_database;
(注:SET collation_connection同时也会自动设置character_set_connection。)

如果不希望MySQL在返回结果时进行转换,可以使用SET character_set_results = NULL;语句

  • 17
  • 3月

PHP发送中文、Ajax接收
只需在php顶部加入一句:

header('Content-type: text/html;charset=GB2312');

xmlHttp会正确解析其中的中文。

Ajax发送中文、PHP接收
这个比较复杂:
Ajax中先用encodeURIComponent对要提交的中文进行编码
PHP中:

$GB2312string=iconv( 'UTF-8', 'gb2312//IGNORE' , $RequestAjaxString);

PHP写入MySQL数据库
建立conn时,query一下set names “gb2312”

  • 12
  • 2月

刚刚看了《汉化教学文集2006》中的几篇文章,谈到了字符编码问题。终于明白了ASCII,Unicode,Unicode big endian,UTF-8的关系。

ASCII:学过计算机基础的都知道,8bits的英文编码。实际只用低7位,127个字符,32(0x20)为空格,之前是控制字符,之后是有效字符。当>128时,需要使用代码页(code page)来确定表示的字符。在保存文件时一般ANSI项就是指它。

Unicode:使 用两个字节对全球字符进行统一编码,有65536个编码。学名“UCS”——“Universal Multiple-Octet Coded Character Set”.UCS-2为两字节版本,UCS-4为四字节版本,目前两个版本内容是一样的(字符数还没超过2个字节能表示的范围)。

Unicode little endian:将Unicode中表示同一个字符的两个字节顺序返过来。主要目的是为了适应CPU处理字符的方式,加快处理速度。在Windows上为Unicode的默认存储方式(记事本保存对话框中的那个“Unicode”就是这个)。

Unicode big endian:Unicode字符编码以正序存储。非默认。

引用一段原文:

//  “endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开,由此曾发生过六次叛乱,一个皇帝送了命,另一个丢了王位。

我们一般将endian翻译成“字节序”,将big endian和little endian称作“大尾”和“小尾”。  //

应该可以说明问题。

UTF-8:Unicode的一种传输及存储方式,主要是为了消除编码中那些0x0000的字节和减少存储英文时所占用的空间。

以下是Unicode(UCS-4)和UTF-8之间的转换关系表:
U-00000000 – U-0000007F: 0xxxxxxx
U-00000080 – U-000007FF: 110xxxxx 10xxxxxx
U-00000800 – U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U-00010000 – U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U-00200000 – U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U-04000000 – U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

Unicode编码转换到UTF-8,简单的把Unicode字节流套到x中就变成UTF-8了。

BMP:Basic Multilingual Plane,UCS-4中0x0000—-这些字符。

引用一下原文:
//  UCS有两种格式:UCS-2和UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。下面让我们做一些简单的数学游戏:

UCS-2有2^16=65536个码位,UCS-4有2^31=2147483648个码位。

UCS -4根据最高位为0的最高字节(引注:即第一个字节)分成2^7=128个group。每个group再根据次高字节分为256个plane。每个 plane根据第3个字节分为256行 (rows),每行包含256个cells。当然同一行的cells只是最后一个字节不同,其余都相同。

group 0的plane 0被称作Basic Multilingual Plane, 即BMP。或者说UCS-4中,高两个字节为0的码位被称作BMP。

将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。在UCS-2的两个字节前加上两个零字节,就得到了UCS-4的BMP。而目前的UCS-4规范中还没有任何字符被分配在BMP之外。  //

BOM:Byte Order Mark,字节序,用以区分Unicode little endian与Unicode big endian。即使用名为”ZERO WIDTH NO-BREAK SPACE”的字符“0xFEFF”传输及存储时首先处理该字符。若读到FEFF,就表明这个字节流是Big-Endian的;而如果是FFFE,就表明 这个字节流是Little-Endian的。

以下为引用:
//  UTF-8不需要它来表明字节顺序,但但可以用BOM来表明编码方式。字符”ZERO WIDTH NO-BREAK SPACE”的UTF-8编码是EF BB BF。所以如果接收者收到以EF BB BF开头的字节流,就知道这是UTF-8编码了。 //

Windows就是使用BOM来标记文本文件的编码方式的。

区位码与GB2312之间的关系:
引用原文:
//  再说区位码,啊的区位码是1601,写成16进制是0x10,0x01。这和计算机广泛使用的ASCII编码冲突。为了兼容00-7f的ASCII编码, 我们在区位码的高、低字节上分别加上A0。这样“啊”的编码就成为B0A1。我们将加过两个A0的编码也称为GB2312编码,虽然GB2312的原文根 本没提到这一点。 //

所有标签:.net Ajax Java javascript Linux map MySQL RSS TD-SCDMA Ubuntu vim web Win7 乱码 基础知识 备份 奥运会 希望泉 性能 缓存 编程