Vim Encoding

每次新装VIM都得设置编码相关的选项,记在这里备忘吧。

encoding: VIM内部编码,也就是内容在VIM内部的表现形式。

fileencoding: 文件读写编码,在打开文件时VIM认为此文件是采用fileencoding所指的编码,于是会进行编码转换,转换为encoding所指编码。

fileencodings: 一个编码序列,VIM依次尝试其中的编码,看看是否能成功转换为encoding所指编码。
termencoding:terminal采用的编码,vim如果要输出到terminal,会将文件转码为termencoding所指编码。

在Linux下,八子一般采用

let &termencoding=&encoding
set fileencodings=utf-8,gbk,ucs-bom,cp936

感谢:
http://edyfox.codecarver.org/html/vim_fileencodings_detection.html

URL编码和字符转义

使用基于Web的服务时,可能会需要在代码里生成URL。这里就涉及到URL的编码 (Encode) 和 解码 (Decode) 。

一个小工具,用来手工Encode/Decode:
Tools/Dencoder

IPHONE下可以使用stringByAddingPercentEscapesUsingEncoding来编码。
但是实际使用中,编码后的URL仍然可能会无效。因为URL的编码方式并不唯一。参见:
Encode-Compare URLEncoding

NSString* escapedURLString = [unescapedString
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]

不同的编码方式下,有些字符不会被编码。
所以,客户端使用什么样的编码方式应该和服务器端的解码方式配对。
可以使用CFURLCreateStringByAddingPercentEscapes
编码URL中参数部分后,再用前面stringByAddingPercentEscapesUsingEncoding编码,应该可以适应多数解码方式。

NSString * encodedString = (NSString *)CFURLCreateStringByAddingPercentEscapes
(NULL, (CFStringRef)yourtext, NULL, 
(CFStringRef)@”!*’();:@&=+$,/?%#[]“, kCFStringEncodingUTF8);

使用中发现,除了编码问题以外,字符的转义也是问题,这里附上一些常用的转义处理:

Javascript下:
转义字符: ‘\’
$转义为\$

XML下:
& —-> \&
< —-> &lt;
> —-> &gt;
‘ —-> &apos;
” —-> &quot;

SQL下(MS Access):
# —-> ##
! —-> !!
‘ —-> ”