乐者为王

Do one thing, and do it well.

导入UC Browser书签到Firefox中

UC Browser保存的书签后缀名是aucf,不能直接导入到Firefox中,必须要把aucf格式转成Firefox支持的格式才行。

先把UC Browser和Firefox的书签格式都分析了一下。Firefox的格式非常简单,就是个HTML文件。UC的是二进制格式,文件以字符串android开头,接着是n个byte的信息,没有分析出来是啥。然后4个byte是书签的数目,再接着的n个byte没去分析,再下来就是每个书签的信息了。书签信息分两部分:名称和地址。都是第1个byte说明后面字符串的长度,字符串以00结尾。

1
2
3
4
5
6
7
8
android    <- 文件头
xxx...     <- n个byte
xxxx       <- 保存的书签数目
xxx...     <- n个byte
xx         <- 书签名称长度
xxx...     <- 书签名称
xx         <- 书签地址长度
xxx...     <- 书签地址

用文本文件打开时可以查看英文字符。书签的地址通常由英文字母组成,所以我们不需要再去分析整个aucf文件的格式,只要把所有书签地址提取出来就行了。下面就是完整的Ruby代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# aucf2ff.rb
if ARGV.length != 1 then
  puts "USAGE: ruby aucf2ff.rb ucfavorite"
  exit
end

ucfavorite = ARGV[0]
if !FileTest.exist?(ucfavorite) then
  puts "File #{ucfavorite} was not found"
  exit
end

ff = File.new(ucfavorite.gsub(".aucf", "_ff.html"), "w")
ff.puts '<!DOCTYPE NETSCAPE-Bookmark-file-1>'
ff.puts '<!-- This is an automatically generated file.'
ff.puts '     It will be read and overwritten.'
ff.puts '     DO NOT EDIT! -->'
ff.puts '<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8">'
ff.puts '<TITLE>Bookmarks</TITLE>'
ff.puts '<H1>Bookmarks Menu</H1>'
ff.puts
ff.puts '<DL><p>'
ff.puts '    <DT><H3>UC Bookmarks</H3>'
ff.puts '    <DL><p>'

buffer = IO.read(ucfavorite)
index = buffer.index("http://")
favorites = buffer.slice(index, buffer.length - index)
favorites.split("http://").each do |fav|
  uri = ''
  fav.each_byte do |c|
    break if c == 00
    uri += c.chr
  end
  if (!uri.empty?) then
    ff.puts '<DT><A HREF="http://' + uri + '" LAST_CHARSET="utf-8">' + uri + '</A>'
  end
end

ff.puts '    </DL><p>'
ff.puts '</DL>'
ff.close

通过上面的程序就可以将UC Browser的书签转成Firefox格式,然后在Firefox中导入就可以了。

Comments