The following articles were authored by Bill JaJa

Kindle 对txt文档中换行符的处理

Kindle是支持txt文档的,但无论是直接使用USB线缆传送或是OTA PUSH的方式,最终txt还是被转化为Amazon私有的azw格式,才能在Kindle上被阅读。虽然Kindle对txt算得上不友好,但txt的通用和便利,仍令人难以舍弃。本文要讨论的是Kindle对txt中换行符\n,\r,空格和制表符\t的处理。

测试环境和步骤如下:

测试环境:

电脑:Windows 7 ,Python 2.6.2

阅读器:Kindle 3 WIFI Only,固件版本:Kindle 3.1(558700031)

测试步骤:

先在Windows 7上使用Python生成标准的txt文档,然后复制一份。分别通过USB和OTA PUSH二种不同的方式传输到Kindle。

用来生成txt文档的Python代码如下:

#!/urs/bin/python
# -*- coding: cp936 -*-

file = open("kindle_test.txt","w")
content1 = "第一行测试\\n效果(所有换行符均放在每行的结尾处)\n第二行测试\\r效果\r第三行测试\\n\\r效果\n\r第四行测试\\r\\n效果\r\n第五行测试\\n\\n效果\n\n第六行测试\\r\\r效果\r\r第七行测试\\n\\r\\n\\r效果\n\r\n\r第八行测试\\r\\n\\r\\n效果\r\n\r\n换行测试完毕。"
content2 = "\n  空格及制表符测试:此行开头进行两个半角空格测试。\n    此行开头进行四个半角空格测试。\n\t此行开头进行一个制表符测试。"
file.write(content1)
file.write(content2)
file.close()
# print content1,content2

运行此代码后最终生成一个名为Kindle_test.txt 的标准文本文件。

上图,是此文档在Windows 7平台使用系统原生的notepad程序打的效果,从中可以的得出如下结论:

\n和\r均被Windows识别为单独的换行符,并且\r\n或者是\n\r表示两个换行符;另外空格和制表符也能完全准确的显示。

上图左是使用USB线缆将文档直接拷贝到Kindle后的效果;上图右则是使用Gmail将同一份文档OTA PUSH到Kindle后的效果。

从上面两张图以及notepad显示的效果图上可以得到如下结论:

1. Kindle系统内置的格式转换软件和Amazon云端的并不是同一套,不然同一个文档不可能产生两种不同的效果。

2. 若从USB线缆向Kindle拷贝txt文档,Kindle内置格式转换规则为: \n, \r均视为单独的换行符,\n后面紧接着的\t被忽略,\n后面紧接着的空格则被缩减了一个,原本2个半角空格变为一个,原本4个半角空格变为3个。

3. 若使用OTA PUSH的方式,Amazon云端格式转换规则为:\r完全被忽略,后面不跟空格的单个\n会被忽略,单个\r\n表示换行,\n\n表示换行外加四个半角空格,\n后面紧跟一个或多个空格仅表示换行(空格被忽略掉),\n\t表示换行外加一个制表符。另外,进行长本文txt文件云端PUSH测试时,\r\n很多时候会被转换成四个半角空格,而不是换行。

总结:为Kindle准备的txt的文档,为保证原有格式请尽量使用USB线缆传输。若准备OTA PUSH,建议使用“\n\n”作为换行符,这样会在下一行的行首多出四个半角空格,但总比让很多段落连一起要强。

补充:为了排除txt文档在使用Gmail上传时被更改,将Gmail发件箱的附件下载与原文件对比没有出入,另外使用QQmail PUSH的时候效果一样。

让Android手机自动校时

原本Android手机的时间设置里面有一项是“自动同步”,但使用过程中发现手机的时间仍会与标准时间有偏差。查资料得知Android原生所使用的时间同步方式为NITZ,国际上移动运营商网络所通用的一种对时方式,需当地运营商网络支持,而且问题是Android只会在系统启动时做一次时间校正。

相对来说,NTP则是Windows/Linux下的一种通用校时方式,并且可以做到保证本地时间与服务器时间非严格同步。接下来就推荐一款Android上的基于NTP的小应用,来搞定系统的校时问题。

snap20110321_174407

使用如下应用的前提:需要root权限,Android下普通用户没有修改系统时间的权限。

推荐的为一款名为ClockSync的小应用,用来获取远程NTP服务器上的标准时间,并校正你手机上的时间,而且可以设置间隔一定时间后自动校正(建议设置为6小时),非常贴心。

如果你有更好的同类应用,欢迎推荐。

如何下载Android Market上未对中国开放的应用

capture-market

对于Android用户来说,官方的Android Market(下文昵称为菜市场)无疑是获取应用的最佳途径,无论从数量、质量和安全性来说都最有保障的。但由于各种已知和未知因素,目前为止Google仍然没有对中国大陆用户开放付费应用的下载,另外部分免费应用也因为地域关系未对我们开放。下面将介绍如何绕过限制来自由下载菜市场上的任何应用程序。

一般情况下,官方的菜市场是通过手机网络的运营商代码来识别你的地域,但当你的手机没有注册任何运营商网络时(场景:飞行模式,开启WIFI连接),Google则会通过IP地址来识别你的地域。根据以上原理找到的两种破解方法如下,前提是要拥有美国的VPN帐号或者是手机拥有root权限。

其一:拥有美国VPN。操作方法为:将手机切至“飞行模式”,开启WIFI连接,启动VPN连接。当VPN连接正常后,打开菜市场就会出现付费应用了。

其二:拥有root权限。操作方法为:在菜市场上搜索并安装“MarketEnabler”这个应用,安装完毕并开启此应用,在“Settings list”下面的“[us]T-Mobile(T-Mobile)”上长按,跳出菜单中选择“fake this provider now”,完成后重新开启菜市场,你会激动的发现也有付费应用了,以前找不到的免费应用也可以找到了。

说明:本文中的方法二以伪装美国运营商T-Mobile为例,你也可以选择除中国外的其它运营商,效果基本相同。

MarketEnabler”这个应用除了伪装成“Settings list”标签中给出的运营商外,也可以在“Set custom”这个标签下自己填入运营商代码,来伪装成全球任何一个移动运营商网络。应用场景之一是:运营商代码设为台湾中华电信的46692,下载KKBOX应用(假设此应用只限于台湾用户)。