Intelligence without ambition is a bird without wings.

2014-12-08
vim十六进制编辑

使用十六进制编辑

:%!xxd

返回到文本模式编辑

:%!xxd -r
阅读此文

2014-12-08
python-str类型和unicode类型

概念

str object和unicode object是两种不同的类型

字符串

字符组成的序列

而字符是经过编码的,常见的编码如ASCII,GB2312,UTF-8等等

词法

引号括起来的字符序列

unicode字符串

unicode码元序列

在python里,16-bit的unicode,对应的是ucs2编码。32-bit对应的是ucs4编码

通过sys.maxunicode可以查看当前Python的unicode编码

词法

引号括起来的字符序列,前面加u,如u'Hello world'

参考

  1. https://docs.python.org/2/library/stdtypes.html#sequence-types-str-unicode-list-tuple-bytearray-buffer-xrange
  2. http://blog.csdn.net/ktb2007/article/details/3876429
阅读此文

2014-12-08
字符编码中的相关概念

字符编码

将字符集中的字符用另一集合中的对象来表示,以便存储或传输。

从数学角度上说,就是一种映射,更准确地说,是一种单射函数,具有唯一确定性,但不存在多个字符映射为同一个码元!

常见的编码方式有,ASCII,摩尔斯电码等。


参考:

  1. 维基-函数
  2. 维基-映射
  3. 维基-字符编码

字符

一个基本信息单位,如字母,数字,标点符号,控制字符等。


参考:

  1. 维基-字符

字符集

字符的集合

代码页

字符编码的别名


参考:

  1. http://en.wikipedia.org/wiki/Code_page

码位

字符在编码表中的值,一般为非负整数。

注:

  • 并不直接对应在计算机中的表达,如一个字符在unicode字符集中的码位,具体怎么表示,取决于编码方式(UTF-8,UTF-16…)

码元

已编码的字符集中占用最小的比特数,如UTF-8为8,UTF-16为16。

字形

一个可以辨认的抽象的图形符号,它不依赖于任何特定的设计,即字符的构成形式

字体

参考

  1. http://zh.wikipedia.org/wiki/%E5%AD%97%E5%BD%A2
  2. https://docs.python.org/2/howto/unicode.html
阅读此文

2014-12-08
python-编码

unicode内部编码实现

  • python2 UCS2(编译默认,–enable-unicode=ucs2)

    >>> sys.maxunicode
    65535
    
  • python3 UCS4(编译默认,–enable-unicode=ucs4)

    >>> sys.maxunicode
    1114111
    

相关数据类型

字节序列(bytes)

一串由0到255之间的数字组成的序列叫做bytes对象

  • 用来存储经过某种编码方式(如UTF-8)的unicode字符串

  • 转换为字符串时,需要知道该bytes的编码

字符串(string)

  • 字符是一种抽象

  • 一个不可变(immutable)的Unicode编码的字符序列叫做string

  • 存储对应的UNICODE编码值

python源文件编码方式

  • python2 默认编码为ASCII,若为其他编码,需要在文件头注释说明(coding: XXX)

  • python3 默认UTF-8

编码转换(str <=> bytes)

python3

  • string => bytes

    a_string = '深入 Python'
    by = a_string.encode('utf-8')
    len(by)
    by = a_string.encode('gb18030')
    len(by)
    
  • bytes => string

    a_string = '深入 Python'
    by = a_string.encode('utf-8')
    by.decode('utf-8')
    

参考:

  1. http://stackoverflow.com/questions/1446347/how-to-find-out-if-python-is-compiled-with-ucs-2-or-ucs-4

获取系统编码参数

系统的缺省编码(一般就是ascii):sys.getdefaultencoding()

系统当前的编码:locale.getdefaultlocale()

系统代码中临时被更改的编码(通过locale.setlocale(locale.LC_ALL,“zh_CN.UTF-8″)):locale.getlocale()

文件系统的编码:sys.getfilesystemencoding()

终端的输入编码:sys.stdin.encoding

终端的输出编码:sys.stdout.encoding

文件编码与字符串编码

字符床常量编码取决于文件编码

  • 默认编码为ASCII

  • 文件头显式指定编码,需要文件本身编码与该声明编码一致

    # Coding: utf-8
    

定义UNICODE字符串,在字符床常量前加u

判断字符串编码

  • type(str)

  • isinstance()

1
2
3
4
5
6
7
print 'default encoding: ' , sys.getdefaultencoding()
print 'stdout encoding: ' , sys.stdout.encoding
s='中文'
if isinstance(s, str):
print 's is a string object'
elif isinstance(s, unicode):
print 's is a unicode object'

常见问题

SyntaxError: Non-ASCII character '\xe4' in file XXX

  • 原因

文件编码不是ASCII编码,但文件开头未指定文件编码

  • 解决

在文件开头指定文件本身编码即可.(文件最好采用utf-8编码)

参考

  1. http://woodpecker.org.cn/diveintopython3/strings.html
  2. https://docs.python.org/2/howto/unicode.html
阅读此文

2014-12-08
python-cgi常见错误

500 Internal Server Error

CGI不能执行

  • 语法有问题

  • 依赖未解决

输出不正确

  • 输出内容不符合CGI规范

    常见问题是,输出头不合法

阅读此文

2014-12-08
判断PC在交换机或路由器中的端口

情景描述

路由器下接多台交换机,不同交换机所属VLAN不同,1台PC被插到非目标交换机当中。

问题

如何找出PC在交换机中的端口?

解决

  • 记录当前网络端口状态

    采用手机拍照,拍取当前PC所属交换机

  • 拔出PC机箱后网线

  • 与拍照比对

    拍照时亮的端口,断开PC后,不亮的端口即为PC所插交换机端口

阅读此文

2014-12-08
windows访问网络打印机

  • 输入网络打印机路径(通过IP访问)

    \\xxx.xxx.xxx.xxx
    
  • 安装打印机驱动

    双击打印机图标

阅读此文

2014-12-06
TortoiseSVN修改SVN仓库路径

  • 右击【项目根目录】

  • 点击菜单

阅读此文

2014-12-05
vim实用命令简记

normal

  • ]} 移动到复合语句尾

insert

  • <C-o> 执行一条命令后返回到插入模式
阅读此文

2014-12-05
python判断字符串是否为空

代码

  • 变量为字符串类型(优雅的方式)
1
2
3
4
if not string:
print('not empty')
else:
print('empty')
  • 变量类型不确定
1
2
3
4
if string == '':
print('not empty')
else:
print('empty')

参考

  1. https://docs.python.org/2/library/stdtypes.html#truth-value-testing
  2. http://stackoverflow.com/questions/9573244/most-elegant-way-to-check-if-the-string-is-empty-in-python
阅读此文