|
|
发表于 2017-9-21 13:30:03
|
显示全部楼层
本帖最后由 slore 于 2017-9-22 15:04 编辑
PECMD强大,但是语法和变量太晦涩了。
- 3字节汉字有7929个
- 4字节汉字有196个
- 3chars.txt
- 一 0xE4B880
- 乙 0xE4B999
- 二 0xE4BA8C
- ...
- 4chars.txt
- 𬉼 0xF0AC89BC
- 𠳐 0xF0A0B390
- 𥻗 0xF0A5BB97
- ...
复制代码
给你个ruby脚本byte_chars.rb:
简单版,不要16进制数的话,10行。思路就是打开文件1行一个字,判断是几个字节,写到对应的Nchars.txt文件。
- # coding: UTF-8
- # GNHZ8kiz 要另存为 UTF-8 without BOM,否则第一行算6字节字了
- f = []
- f[0] = File.open("3chars.txt", 'w+')
- f[1] = File.open("4chars.txt", 'w+')
- def hexcode(c)
- c.bytes.map {|b| b.to_s(16).upcase}.join('') #每个字节转成16进制数字并拼接起来
- end
- File.open('GNHZ8kiz').each_line do |c|
- c.chomp! #移除换行符
- f[c.bytes.size-3].write "#{c} 0x#{hexcode(c)}\n"
- end
复制代码
完整版:
- # coding: UTF-8
- $chars = [[],[],[],[],[]]
- File.open('GNHZ8kiz').each_line do |c|
- c.chomp! #移除换行符
- $chars[c.bytes.size-1].push c
- end
- $chars.each_with_index do |group, i|
- puts "#{i+1}字节汉字有#{group.size}个" if group.size > 0
- end
- def output(i)
- f = File.open("#{i}chars.txt", 'w+')
- $chars[i-1].each do |c|
- h = '';c.bytes.each {|b| h<<b.to_s(16).upcase}
- f.write "#{c} 0x#{h}\n"
- end
- f.close
- end
- output(3)
- output(4)
复制代码
重点代码只是第12行。 |
|