软件名称:极酷新闻 Cool News v1.2.1
软件大小:284K
支持语言:英语、简体中文、繁体中文
固件版本:1.5 – 2.3
分辨率:支持所有分辨率
备注:免费软件
软件描述:
支持多地区的Google新闻阅读工具
具有以下特点
多主题阅读模式,支持常用的主题内容。
向下滚动时自动加载新闻列表。
默认情况下根据系统语言自动识别用户所在的区域版本。
未来将增加更多的地区支持。
软件截图:
下载:CoolNews.apk
软件名称:记事本 Notepad v1.6.1
软件大小:342K
支持语言:英语、西班牙语、简体中文、繁体中文、俄语
固件版本:1.5 – 4.0.3
分辨率:支持所有分辨率
备注:免费软件
软件描述:
一款智能检测字符编码的文本编辑工具
具有以下特点
-新建 打开 保存 删除 发送 文本文件。
-支持自定义字体。
-从邮件附件打开文本文件。
-设置文本显示选项。
-设置打开和保存文件时使用的字符编码。
-自动转换Windows和Mac的换行符为Linux格式。
软件截图:
下载:Notepad.apk
最近打算写个跨平台的新浪微博桌面客户端,发现AIR的版本有很多,但是使用起来很占资源而且启动也比较慢,所以准备用Qt写个原生的客户端。然后下载了C++版本的SDK一看,只支持Windows,反正新浪的API是REST+XML JSON的,不用SDK也罢。
QtScript不就是一个符合ECMAScript标准的脚本引擎么,正好拿来解析JSON。
英文好的可以参考这篇文章Parsing JSON with QT using standard QT library
使用起来非常简单,下面是获取新浪微博获取微博信息列表并通过QTableWidget显示出来的部分代码。
QScriptValue sc;
QScriptEngine engine;
// 高版本需要加括号
sc = engine.evaluate("(" + QString::fromUtf8(reply->readAll()) + ")");
qint32 count = sc.property("length").toInt32();
ui->tableWidget->setRowCount(count);
for (int i = 0; i < count; i++) {
QTableWidgetItem *text = sc.property(i).property("text").toString();
ui->tableWidget->setItem(i, 1, text);
}
DataSnap可以直接传递和返回TStream类型的参数,这点是很方便的。但是很多人发现好像大小稍微大点就工作不正常了,就变相使用其它类型转换来转换去,这样便利性就失去了。
官方有篇博客很详细的介绍了stream的使用,英文好的可以去看下DataSnap Server Method Stream Parameters
DataSnap默认的缓存大小是32k 所以如果流的大小超过这个大小就会被自动分成多个包,这就是传递大量数据的基础,如果一次性发送就可能受到内存的限制。
当传递大量数据时获取到的大小是-1,所以如果还是按照一般的方法来读取流的数据就会有问题了。
下面是一个服务端代码的示例参考,稍加修改就可以传递文件到服务端,由于流的数据是原始数据包发送,所以在不对数据包压缩加密的情况下,传递速度是和其它方式没有多大区别的。
// FS是一个文件流
function TMyDSServer.PutFile(Stream: TStream): Boolean;
const
BufSize = $F000;
var
Buffer: TBytes;
ReadCount: Integer;
begin
if Stream.Size = -1 then // 大小未知则一直读取到没有数据为止
begin
SetLength(Buffer, BufSize);
repeat
ReadCount := Stream.Read(Buffer[0], BufSize);
if ReadCount > 0 then
FS.WriteBuffer(Buffer[0], ReadCount);
if ReadCount < BufSize then
break;
until ReadCount < BufSize;
end
else // 大小已知则直接复制数据
FS.CopyFrom(Stream, 0);
Result := True;
end;
正在写个android的记事本程序,文件的编码问题就是个头疼的问题。
Windows上的记事本文件就很少见到过几个是Unicode存储的,所以就需要能够自动探测文本的编码来读取文件,至于准确率也未必要100%,只要能让用户自己设定文本的编码就可以了。
于是试用了下jchardet, mozilla的一个探测字符集编码库的java移植版本,经过测试发现准确率简直太低了。UTF8,UTF16-BE,UTF16-LE的三个文本就有一个识别不了,最后发现了另外一个也是从mozilla移植过来的库juniversalchardet,准确率果然高了很多。
universalchardet:http://mxr.mozilla.org/seamonkey/source/extensions/universalchardet/
juniversalchardet:http://code.google.com/p/juniversalchardet/
使用起来很简单,下面用个例子说明:
// 构造一个探测器
UniversalDetector det = new UniversalDetector(new CharsetListener() {
@Override
public void report(String charset) {
// 异步得到探测结果
if (charset != null) {
System.out.println("Detected encoding = " + charset);
} else {
System.out.println("No encoding detected.");
}
}
});
try {
InputStream is = new FileInputStream(file);
byte[] buf = new byte[4096] ;
int len;
// 读取文件内容给探测器检测
while ((len = is.read(buf, 0, buf.length)) != -1 && !det.isDone()) {
det.handleData(buf, 0, len);
};
is.close();
// 探测结束并且把结果通知给CharsetListener
det.dataEnd();
// 也可以同步得到探测结果
// String charset = det.getDetectedCharset();
// 后续要继续使用需要重置探测器
det.reset();
} catch (Exception e) {
}





















