Raspberry Pi(树莓派)国内软件源

树莓派自带的软件源是

deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi

由于网站在国外,导致下载速度非常慢,因此需要修改为国内镜像站点即可。

Raspberry Pi(树莓派)国内软件源:

修改配置文件

pi@raspberrypi ~ $ vi /etc/apt/sources.list

deb http://mirrors.ustc.edu.cn/raspbian/raspbian/ wheezy main contrib non-free rpi
deb-src http://mirrors.ustc.edu.cn/raspbian/raspbian/ wheezy main contrib non-free rpi

推荐使用如下命令直接替换成国内源(中科大的服务器):

$ sudo cp /etc/apt/sources.list /etc/apt/sources.list.old

$ sudo sed -i "s/mirrordirector.raspbian.org/mirrors.ustc.edu.cn\/raspbian/g" /etc/apt/sources.list

# 树莓派3B的源
$ sudo sed -i "s/archive.raspberrypi.org/mirrors.ustc.edu.cn\/raspbian/g" /etc/apt/sources.list

#树莓派2代的源
$ sudo sed -i "s/raspbian.raspberrypi.org/mirrors.ustc.edu.cn\/raspbian/g" /etc/apt/sources.list

$ sudo cp /etc/apt/sources.list.d/raspi.list /etc/apt/sources.list.d/raspi.list.old

$ sudo sed -i "s/^deb http:\/\/archive.raspberrypi.org\/debian/#deb http:\/\/archive.raspberrypi.org\/debian/g" /etc/apt/sources.list.d/raspi.list

树莓派Raspberry Pi上手报告

raspberry-pi-logo背景

关于树莓派的背景介绍在网上已经很多了,在树莓派的官方网站上也有一个长篇大论。这里只是简单的列一下:

  1. 厄普顿(Eben Epton)在2006年已经意识到要为儿童提供一种廉价的计算机,因为他觉得从2000年之后,报读计算机系的优等生无论从数量上还是技术水平上都一年 不如一年(the year-on-year decline in the numbers and skills levels of the A Level students applying to read Computer Science in each academic year,貌似这段是请中国人写的,因为除了中国人之外,想不出哪里的人会用read Computer Science来写报读计算机专业)。而90年代的学生大部分都是有经验的编程爱好者(experienced hobbyist programmers)。
  2. 厄普顿觉得这样的原因在于:家庭PC机过于昂贵,所以父母不肯给小孩在上面进行一些实验。所以他想做一个廉价的,可以和老式计算机一样,一启动就 进入编程环境的计算机。(其实我觉得不是过于昂贵,当年的Apple II和中华学习机也是要几千块一台的,真正原因是PC从极客用品变成了一种日常消费品,父母同样不会让你拿家里的冰箱微波炉拆开做实验的)

后来的故事大家也知道了,由于他成立了树莓派基金运作这个事情,宣称要做一个只有25美金的家用电脑,而且体积和信用卡一样大,可以接电视,可以播高清视频,所以一下子吸引了眼球,以至于订购的人刷爆了他的网站。

订购

淘宝上很早就有了,但是有点贵,我也不想断了人家的财路,也不想在这里帮别人做广告,反正最后我是以35美金加中国的17%的增值税加较高的运费(从上海到广州要40块钱)买到的,到手的价格还算合理。订购后2个星期内到货。

开箱

整块板卡的做工不错,拿在手上确实觉得很小,SD卡的插槽有点粗糙,见照片。raspberry-pi-1-680x1024 raspberry-pi-2-1024x680 可能为了节省体积,电路板上没有任何可以用来固定的螺丝孔,所以一定要等有人做出专门的外壳或者专门的架子才能固定,树莓派基金承诺今年夏天会推出 外壳。电源接口是microUSB而不是miniUSB,和我的C8500的接口一样,个人感觉如果是miniUSB会通用一点。由于只有两个USB口, 但是正常使用除了接键盘鼠标外,大部分人还是需要接多一个USB硬盘的,所以需要配合一个USB HUB来使用,而且这种板卡的USB口的驱动能力不会很强的,所以还必须是有源的USB HUB才能接大点的硬盘。

加电

没有插SD卡,加电时除了电源灯之外,不会有任何的反应,HDMI没有任何输出,树莓派的说明书中提到可以通过串口输入命令,但是它的串口是通过那两排GPIO的脚的其中三个脚印引出的,而且是TTL电平的,必须通过驱动芯片才能和PC机的串口连接。raspberry-pi-serial_sm

准备SD卡

新手建议使用NOOBS 版本的安装,目前的最新版本是1.4.0,下载网址为 http://www.raspberrypi.org/downloads/,参考下载的zip文件的 ”INSTRUCTIONS-README.txt“ 里面的介绍,就可以简单安装。手动安装的话,参考如下。 树莓派的官网提供了三个版本的镜像文件,还有无数第三方的镜像,由于是初次接触,还是用官网的Raspbian版本,因为是基于Debian的,所以Debian的一些命令和配置方法可以用得上。还要下载Win32DiskImager工具,用于在Windows下将下载的IMG文件写入到SD卡中。至于为什么把镜像文件直接拷贝到SD卡中是无效的,一言难尽,就和刻录光碟的ISO镜像要用专门刻录镜像的功能,而不能直接把ISO文件刻录到光碟上的道理是一样的。raspberry-pi-diskimager

下载树莓派最新镜像文件,然后把读卡器和SD卡插入计算机,运行Win32DiskImager,选择镜像文件和合适的盘符,如果原来机器上插有其他的USB硬盘或者SD卡,建议在做这件事之前全部拔掉,避免发生选错盘符,把整个USB硬盘资料全部洗掉的情况。 raspberry-pi-3-1024x680 写入完成后,就可以把SD卡插到树莓派上,把HDMI线、鼠标、键盘、网线全部插上。

首次启动

加电后,如果电源灯旁边的绿色的灯(OK)会闪动,就说明SD卡是可用的。这时如果HDMI连接好电视了,电视上就会开始出现启动画面了。raspberry-pi-4-1024x680 接着是熟悉的Linux启动界面,企鹅被替换成了树莓: raspberry-pi-5-1024x680 firstscreen 首次启动将出现系统初始配置的界面,这个界面在也可以在之后的终端窗口中通过sudo raspi-config激活。 由于在初始配置的界面上没有看到有网络配置的选项,所以建议在网络环境中一定要有DHCP,也就是能自动获取IP的网络环境。因为Raspbian的各种软件的安装是需要网络连接支持的。需要用到的功能说明如下:

  • expand_rootfs - 将根分区扩展到整张SD卡,因为整个Image才400多兆,但是现在的SD卡基本都是几个G的,除非SD卡有其他用途,一般建议选择这项,这样可以有足够多的空间来安装各种程序。
  • overscan - 可以扩充或者缩小屏幕的设置,除非一启动就发现显示的内容能刚好填满整个电视的画面。大部分情况下是不能填满或者超过,如果这样就要enable这个,然 后在系统启动之后,更改config.txt中的overscan_left、overscan_right、overscan_top和 overscan_bottom的内容,如果显示内容超出屏幕的范围(显示不全),就要设置这些值为正值,如果是1080p,一般设置为48。如果显示的 内容不能填满屏幕,则设置这些值为负值,如果是1080p,一般设置为-48。具体可以更加显示的结果,以16为步长进行调整。
  • configure_keyboard  - 这个很重要,前面的屏幕选默认值:Generic 105-key (Intl) PC,但在Keyboard layout:时,显示出来的都是English(UK)的,要选择Other,然后在里面选择English(US),否则会出现键盘的一些符号不对或 者对调,比如引号”和@符号对调,#号变成英镑符号等等。之后的两个屏幕都选择默认值就可以了,到了:Use Control+Alt+Backspace to terminate the X server? 时,选择Yes,表示用这个可以终止X Server,当整个X-Window死掉的时候可以用。
  • change_pass - 默认的用户名是pi,密码是raspberry,一般登录时不需要输入,但是用ssh远程连接时要用到这个用户名和密码,这里可以更改密码。
  • change_locale - 更改语言设置。在Locales to be generated: 中,选择en_US.UTF-8和zh_CN.UTF-8。在Default locale for the system environment:中,选择en_US.UTF-8(等启动完机器,装完中文字体,再改回zh_CN.UTF-8,否则第一次启动会出现方块)。
  • change_timezone - 更改时区,这个很重要,因为树莓派没有内部时钟,是通过网络获取的时间,如果设错时区,那么时间就不正确了,选择Asia - Shanghai,没错是Shanghai,木有Beijing,这是Unix的传统。缩写是CST,不知道是China Shanghai Time还是China Standard Time。
  • memory_split - 按照网上的说法,这个功能有Bug,会导致/boot/start.elf损坏使系统无法启动,所以不要使用这个功能。 可以通过拷贝/boot/下的arm128_start.elf、arm192_start.elf、arm224_start.elf覆盖 start.elf来实现显存和内存的划分。为了能播放高清1080p的视频,至少要分配64M显存给GPU。所以arm224就不能播放1080p高清 视频。
  • ssh - 是否激活sshd服务,应该选择激活,这是当界面死掉后唯一进入机器的通道(如果Kernel没死的话),可以找另外一部机器,用putty或者其他ssh的工具连接到这部机器上,用pi这个用户登录,至少可以实现安全重启。
  • boot_behaviour - 设置启动时启动图形界面,正常肯定是Yes。

设置完成后,选择Finish,会提示是否重启,选择Yes。 重启后,将进入LXDE的X-Window环境,反正都是有桌面图标和开始菜单,应该比较容易掌握使用。

让Raspbian支持中文

一直令我很奇怪的是,即使你用Debian的安装光碟安装系统,如果你把Locale改成了中文的话,系统是不会自动安装中文字体的,直接的效果是 系统的很多信息都用中文显示,但是由于没有安装字体,所以全部变成了方块,所以完全不知道信息的内容是什么, 这个作为系统安装工具我认为是有问题的,因为这样会直接造成系统不可用,基于Debian的Raspbian也有同样的问题。所以如果你在初始设置时,不 小心把系统的Locale设置成了zh_CN.UTF-8,当你进入Raspbian的图像界面时,会马上傻眼了,不知道图标、菜单的内容是什么,因为全 部是方块。所以建议初始设置时,locale尽量用en_US.UTF-8或者en_GB.UTF-8。启动后,双击桌面那个计算机显示器图标,出现提示 符时打入:

$ sudo apt-get install ttf-wqy-zenhei

将安装文泉驿的开源中文字体.。 中文是可以显示啦,输入呢?Linux下早就有啦,叫SCIM(Smart Common Input Method ),所以只要输入:

$ sudo apt-get install scim-pinyin

就会安装拼音输入法,安装完成后,可以直接打入scim激活,下次启动是会自动启动的。快捷键也是Ctrl+空格。或者直接点击右下角图标选择。 接着运行:

$ sudo raspi-config

然后选择change_locale,在Default locale for the system environment:中选择zh_CN.UTF-8。然后重启机器,就发现整个环境变成中文的了。 raspberry-pi-home-screen-1024x576

视频播放

标准Raspbian版本中支持树莓派的GPU的播放器好像只有omxplayer,是个命令行程序,没有界面的,也不能拖动。它有很多参数,最常 用的是-o,选项有local和hdmi,表示声音输出到audio out还是hdmi,omxplayer后面跟着要播放的文件名称,不支持wmv,不支持外置字幕。打开终端窗口,出现提示符后输入:

$ omxplayer -o hdmi 文件名

也可以先用cd命令,将当前路径改变到文件所在的目录,文件名就不需要绝对路径了。其实大家会觉得命令行输入非常麻烦,但只要用Tab键进行命令补 齐,用ls列出当前目录的文件,再配合鼠标选择文字,然后按中键(就是按下滚轮)进行连动的复制粘贴,即使没有资源管理器也会发现目录操作可以很快速的。 由于一般媒体文件都是放置在外置的硬盘中,所以这时需要将硬盘接入到USB口上,系统默认会在/media目录下创建和硬盘卷标一样的目录,并将USB硬盘挂接上去,之后就可以访问了。 测试的结果大部分用X.264编码的1080p视频都可以正常流畅播放。唯一一部无法播放的是:[魔术师和兔子].Pixar.Short.Presto.1080p.BluRay.x264.mkv。 这是《变形金刚3》的播放效果:raspberry-pi-6-1024x680 omxplayer的快捷键如下:

Key Action
1 加速
2 减速
j 上一条音轨
k 下一条音轨
i 上一节
o 下一节
n 上一条字幕轨
m 下一条字幕轨
s 显示/不显示字幕
q 退出
空格或 p 暂停/继续
- 减小音量
+ 增加音量
后退30
前进30
后退600
前进600

 

接下来玩什么

1.超频(overclocking)

玩家型的CPU都是支持超频的,通过更改/boog/config.txt中的下列参数可以实现超频:

Option Description
arm_freq frequency of ARM in MHz. Default 700.
gpu_freq Sets core_freq, h264_freq, isp_freq, v3d_freq together.
core_freq frequency of GPU processor core in MHz. It have an impact on ARM performance since it drives L2 cache. Default 250.
h264_freq frequency of hardware video block in MHz. Default 250.
isp_freq frequency of image sensor pipeline block in MHz. Default 250.
v3d_freq frequency of 3D block in MHz. Default 250.
sdram_freq frequency of SDRAM in MHz. Default 400.
over_voltage ARM/GPU core voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1]
over_voltage_sdram Sets over_voltage_sdram_c, over_voltage_sdram_i, over_voltage_sdram_p together
over_voltage_sdram_c SDRAM controller voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V) [1]
over_voltage_sdram_i SDRAM I/O voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1]
over_voltage_sdram_p SDRAM phy voltage adjust. [-16,8] equates to [0.8V,1.4V] with 0.025V steps. Default 0 (1.2V)[1]

如何组合参照下表(注意:如果设置了over_voltage,质保就会失效,但是SD卡在你手上它怎么知道你设了?):

arm_freq gpu_freq core_freq h264_freq isp_freq v3d_freq sdram_freq over_voltage over_voltage_sdram
750 255         450    
900 250         500    
900 275         500    
900   450       450    
930 350         500    
1000   500       450 6  
1000   500       500 6  

但是本人没有玩过,会不会发生冒烟、地震、火山爆发或61年一遇的洪水等情况,就不得而知了。

2.Razdroid

实际上就是 Android 4.0  (Ice Cream Sandwich) for Raspberry Pi。根据这个帖子,安卓4.0已经在树莓派上跑起来了,很快就会发布了。这是我非常期待的一个东西,之后就有大量的应用程序可以用了,但是我还是对性能上的表现十分担心,毕竟现在很多手机都是1G以上的CPU和1G内存了。 raspberry-pi-razdroid-1-1024x575 raspberry-pi-razdroid-2-1024x575

3.XBian

XBMC是Linux的媒体中心版,XBian就是XBMC和Raspbian结合的产物,作为播放器应用,这个也应该更加方便,支持的文件格式应该更多,尤其是能支持外置字幕。

4.SSH

最新版本的已经自带SSH ,并且直接就可以登陆成功了,因此不需要特别安装了。 引用 http://www.leiphone.com/news/201406/raspberry-pi-hands-on.html

Windows下Mingw的复制粘贴

使用GIT,免不了会接触到GIT的命令行界面,但是在这个界面上面貌似不能复制粘贴,比较麻烦,网上查询了一下,可以按照下图的方式来操作,就是有些费劲啊。
右击标题栏,在弹出的菜单里面选择复制粘贴。mingw_copy

调试UMDF驱动

相对于调试运行在最高特权级的WDM、KMDF驱动,调试运行在ring3的UMDF驱动难度大为降低,不需要双机调试,我们可以像调试普通应用程序和服务一样在一台电脑上完成。

调试方法:

  1. 编译好需要调试的驱动(包括安装用的inf等),连接硬件,把需要调试的驱动安装上。然后断开硬件连接(对于USB设备来说直接拔出就可以了)。
  2. 启动WinDBG,设置好符号路径,特别是被调试驱动的符号。详细设置可以参考Debugging Tools的文档。
  3. 运 行regedit,打开
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\{193a1820-d9ac-4997-8c55-be817523f6aa}

    如果之前从 未调试过UMDF驱动,会发现HostProcessDbgBreakOnDriverLoad键值为0,这个键值的含义是延迟多少秒加载驱动对象。我们 把它修改为15秒(十六进制0xF,如果手慢可以改得更大)。注意这个键值不影响DllMain,如果要调试DllMain,请修改 HostProcessDbgBreakOnStart。

  4. 插入硬件,并且在15秒内使用WinDBG的Attach to Process(快捷键是F6),找到UMDFHost.exe,attach即可。注意如果系统有多个使用UMDF驱动的硬件,就会有多个 UMDFHost.exe进程,为了不致混淆,请提前移除不用的硬件。
  5. 完成调试后,请恢复注册表(将延迟修改为0),以免正常硬件的驱动加载被延迟。

链接 http://hyperiris.blog.163.com/blog/static/180840059201026477127/

Windows打开应用,提示“此程序被组策略阻止”

Windows打开应用,提示“此程序被组策略阻止”,该问题为组策略限制了用户使用某个应用程序,一般可以在

控制面板--->管理工具--->本地安全策略-->软件限制策略

中找到并且解除限制。但是有时候采用域控制的网络,这个控制信息可能存储在域控制服务器上面,这个时候就不好处理了,其实域控制的信息,也是要提前写入到本机的,总不能用户拔掉网线就可以使用某个应用,插上网线就不能使用某个应用了吧。因此只要找到注册表位置,删除即可。

组策略的注册表位置如下所示

[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft]

先备份一下注册表,然后全部删除,重启机器即可。

其他的可能存储软件限制逻辑的注册表位置如下所示,可以自行尝试。

[HKEY_LOCAL_MACHINE\Software\Policies\Microsoft]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies]
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Group Policy]
[HKEY_CURRENT_USER\Software\Policies\Microsoft]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Group Policy]
[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies]

How to successfully build packages for WD My Cloud from source

The WD My Cloud comes with a Debian wheezy system on it. However WD customized that in a way that it is hardly possible (if not impossible at all) to install new packages using the standard "apt-get install <package name>" way, especially when you update the device firmware to version 4.x or later. The latest firmware, in fact, uses a modified Debian system with 64K sized memory pages: if you install a package using "apt-get install <package name>" from the standard repositories, almost certainly it won't run and produce just a laconic "Killed" output.
继续阅读How to successfully build packages for WD My Cloud from source

Ubuntu下HTTP多线程下载工具

Windows下的下载工具--迅雷,之所以下载速度快,乃是它能搜索资源、为己所用,而不是仅仅从原始地址这单一资源处下载。

Ubuntu下也有类似的工具,那就是aira2。
aira2是一个命令行下载工具,可以配合其他图形界面的下载软件使用。我用的是uget+aria2。uget本身是一个小巧实用的多线程下载工具,加上aria2作为插件,下载速度有明显提高。

一、安装。
uget和aria2都可以在“软件中心”中安装。但是版本都是比较旧的版本。

如果需要安装最新的版本,可以在终端中添加ppa进行安装:
1.uget的安装:

sudo add-apt-repository ppa:plushuang-tw/uget-stable
sudo apt-get update
sudo apt-get install uget

2.aria2的安装:

sudo add-apt-repository ppa:t-tujikawa/ppa
sudo apt-get update
sudo apt-get install aria2

安装完aria2后,可以在终端中运行aria2 -v,查看版本和支持的特性。需要1.10以上的版本才能支持资源搜索。

二、使用与设置技巧
1.主界面及版本

20130612105251093

2.启用aria2插件

20130612105336468

3.设置下载任务的属性(同时下载几个任务、多少个服务器、保存位置等)

20130612105408843

20130612105426343

服务器数设置为16比较合适。

参考网址 http://blog.csdn.net/luojiming1990/article/details/9078447

UTF8 + BOM产生问题与小结

写python脚本的时候发现这样一个问题:从xls文件导出到txt时,无法直接转换为int型数据,输出查看发现和文件编码方式产生的附加信息有关用一个简单的文件举例

90905
90907
90908
90909
90939
90940
90946
90959
90961
90965

当文件分别用ascii,utf8,utf8+bom作为编码格式时,显示输出结果如下:

使用ascii编码的输出:

['90905\r\n', '90907\r\n', '90908\r\n', '90909\r\n', '90939\r\n', '90940\r\n', '90946\r\n', '90959\r\n', '90961\r\n', '90965']

使用utf8编码的输出:

['90905\r\n', '90907\r\n', '90908\r\n', '90909\r\n', '90939\r\n', '90940\r\n', '90946\r\n', '90959\r\n', '90961\r\n', '90965']

使用bom编码的输出:

['\xef\xbb\xbf90905\r\n', '90907\r\n', '90908\r\n', '90909\r\n', '90939\r\n', '90940\r\n', '90946\r\n', '90959\r\n', '90961\r\n', '90965']

原来utf8+bom不能直接转换int的原因在这里,它在文件头插入了一个表示文件编码的信息\xef\xbb\xbf,那么UTF-8(无BOM)和UTF-8这两个有什么区别呢?BOM是什么呢?

什么是BOM?

BOM: Byte Order Mark

UTF-8 BOM又叫UTF-8 签名,其实UTF-8 的BOM对UFT-8没有作用,是为了支持UTF-16,UTF-32才加上的

BOM,BOM签名的意思就是告诉编辑器当前文件采用何种编码,方便编辑器识别,但是BOM虽然在编辑器中不显示,但是会产生输出,就像多了一个空行。

Byte Order Marks are special characters at the beginning of a Unicode file to indicate whether it is big or little endian, in other words does the high or low order byte come first. These codes also tell whether the encoding is 8, 16 or 32 bit. You can recognise Unicode files by their starting byte order marks, and by the way Unicode-16 files are half zeroes and Unicode-32 files are three-quarters zeros. Unicode Endian Markers

Byte-order mark Description
EF BB BF UTF-8
FF FE UTF-16 aka UCS-2, little endian
FE FF UTF-16 aka UCS-2, big endian
00 00 FF FE UTF-32 aka UCS-4, little endian.
00 00 FE FF UTF-32 aka UCS-4, big-endian.

UTF的字节序和BOM

UTF- 8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如收到 一个“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是 “乙”?

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte Order Mark。BOM是一个有点小聪明的想法:

在 UCS编码中有一个叫做"ZERO WIDTH NO-BREAK SPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输 字符"ZERO WIDTH NO-BREAK SPACE"。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

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

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

原来BOM是在文件的开始加了几个字节作为标记。有了这个标记,一些协议和系统才能识别。

ok,说了这么多背景,那么如何解决这个问题呢?

如何使用BOM头

BOM头的删除

对UTF-16, Python将BOM解码为空字串。然而对UTF-8, BOM被解码为一个字符,如例:

>>> codecs.BOM_UTF16.decode( "utf16" )
>>> codecs.BOM_UTF8.decode( "utf8" )
 u'\ufeff'

简单的做法是在文件读入时使用

import codecs

f = codecs.open(sys.argv[1],'r', 'utf_8_sig')

即可,具体可以参见[http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig|http://docs.python.org/library/codecs.html#module-encodings.utf_8_sig]

或者:

u.lstrip( unicode( codecs.BOM_UTF8, "utf8" ) )
BOM头的添加
out = file( "someFile", "w" )
out.write( codecs.BOM_UTF8 )
out.write( unicodeString.encode( "utf-8" ) )
out.close()
out = file( "someFile", "w" )
out.write( codecs.BOM_UTF8 )
out.write( unicodeString.encode( "utf-8" ) )
out.close()

参考 http://www.cnblogs.com/DDark/archive/2011/11/28/2266085.html

python下的编码检测——chardet

在处理字符串时,常常会遇到不知道字符串是何种编码,如果不知道字符串的编码就不能将字符串转换成需要的编码。面对多种不同编码的输入方式,是否会有一种有效的编码方式?chardet是一个非常优秀的编码识别模块。

chardet 是python的第三方库,需要下载和安装。现在 pip 已经可以很好的支持这个版本的下载了,建议使用pip 安装,关于pip 的安装部分,可以参考Windows下python的包管理器pip安装
在安装完chardet模块,我就可以使用它了,来看一段示例代码。
import chardet
import urllib

#可根据需要,选择不同的数据
TestData = urllib.urlopen('http://www.baidu.com/').read()
print chardet.detect(TestData)

运行结果:
{'confidence': 0.99, 'encoding': 'GB2312'}
运行结果表示有99%的概率认为这段代码是GB2312编码方式。
另外一个相对高级的应用。

import urllib
from chardet.universaldetector import UniversalDetector
usock = urllib.urlopen('http://www.baidu.com/')
#创建一个检测对象
detector = UniversalDetector()
for line in usock.readlines():
	#分块进行测试,直到达到阈值
    detector.feed(line)
    if detector.done: break
#关闭检测对象
detector.close()
usock.close()
#输出检测结果
print detector.result

运行结果:
{'confidence': 0.99, 'encoding': 'GB2312'}

应用背景,如果要对一个大文件进行编码识别,使用这种高级的方法,可以只读一部,去判别编码方式从而提高检测速度。

参考 http://blog.csdn.net/aqwd2008/article/details/7506007

Windows下python的包管理器pip安装

做python开发,要用到第三方包,关于MAC下面如何安装Pip ,可以参考前面的 Mac OS 10.9 下python安装easy_install pip 现在我们看看在Windows下面的操作,打开 Pip的官方安装指南https://pip.pypa.io/en/latest/installing.html

Installation

Python & OS Support

pip works with CPython versions 2.6, 2.7, 3.1, 3.2, 3.3, 3.4 and also pypy.

pip works on Unix/Linux, OS X, and Windows.

Note

Python 2.5 was supported through v1.3.1, and Python 2.4 was supported through v1.1.

Install pip

To install or upgrade pip, securely download get-pip.py.(如果官网下载不下来,可以点这个链接在本网站下载

Then run the following (which may require administrator access):

python get-pip.py

If setuptools (or distribute) is not already installed, get-pip.py will install setuptools for you. [2]

To upgrade an existing setuptools (or distribute), run pip install -U setuptools. [3]

To enable the use of pip from the command line, ensure the Scripts subdirectory of your Python installation is available on the system PATH. (This is not done automatically.)

Additionally, get-pip.py supports using the pip install options and the general options. Below are some examples:

Install from local copies of pip and setuptools:

python get-pip.py --no-index --find-links=/local/copies

Install to the user site [4]:

python get-pip.py --user

Install behind a proxy:

python get-pip.py --proxy="[user:passwd@]proxy.server:port"

Upgrade pip

On Linux or OS X:

pip install -U pip

On Windows [5]:

python -m pip install -U pip

Using Package Managers

On Linux, pip will generally be available for the system install of python using the system package manager, although often the latest version will be unavailable.

On Debian and Ubuntu:

sudo apt-get install python-pip

On Fedora:

sudo yum install python-pip