使用linux系统下的GBK.gz和UTF-8.gz文件,实现gbk到utf8之间的相互转换
2020-01-12 11:01
471 查看
GBK 转 UTF-8 (trans.php) :
#!/usr/bin/php <?php define('GBK', '/usr/share/i18n/charmaps/GBK.gz'); define('UTF8', '/usr/share/i18n/charmaps/UTF-8.gz'); define('INPUT_FILE', 't.txt'); define('OUTPUT_FILE', 'a.txt'); $source = file_get_contents(INPUT_FILE); $source_utf8 = ''; $len = strlen($source); for($i = 0; $i < $len; $i++) : if(ord($source{$i}) < 128) : $source_utf8 .= $source{$i}; continue; endif; $word_gbk = '/x'.base_convert(unpack('C', $source{$i})[1], 10, 16).'/x'.base_convert(unpack('C', $source{$i+1})[1], 10, 16); $i ++; $word_unicode = exec('gzip -dc '.GBK.' |awk \'/CJK/ { if ($2 == "'.$word_gbk.'") print $1}\''); $word_unicode = (int) base_convert(str_replace(array('<U', '>'), '', $word_unicode), 16, 10); for($j = 1; $line = exec('gzip -dc '.UTF8.' |grep "<CJK>"|sed -n '.$j.'p'); $j++) { list($unicode_wrap, $utf8_code) = explode(' ', $line); list($unicode_wrap_min, $unicode_wrap_max) = explode('..', $unicode_wrap); $unicode_wrap_min = (int) base_convert(str_replace(array('<U', '>'), '', $unicode_wrap_min), 16, 10); $unicode_wrap_max = (int) base_convert(str_replace(array('<U', '>'), '', $unicode_wrap_max), 16, 10); if($word_unicode > $unicode_wrap_min and $word_unicode < $unicode_wrap_max) break; } foreach(str_split($utf8_code, 4) as $key => $char) { if($key == 2) $source_utf8 .= pack('C', (int) base_convert(substr($char, 2, 2), 16, 10) + ($word_unicode - $unicode_wrap_min)); else $source_utf8 .= pack('C', (int) base_convert(substr($char, 2, 2), 16, 10)); } endfor; file_put_contents(OUTPUT_FILE, $source_utf8); ?>
测试文件内容 t.txt:
sdf啊4h海星kdi3大小k35
输出文件内容 a.txt:
sdf啊4h海星kdi3大小k35
执行命令: php ./trans.php
查看结果:hexdump -C t.txt && hexdump -C a.txt
00000000 73 64 66 b0 a1 34 68 ba a3 d0 c7 6b 64 69 33 b4 |sdf..4h....kdi3.|
00000010 f3 d0 a1 6b 33 35 |...k35|
00000016
00000000 73 64 66 e5 95 8a 34 68 e6 b5 b7 e6 98 9f 6b 64 |sdf...4h......kd|
00000010 69 33 e5 a4 a7 e5 b0 8f 6b 33 35 |i3......k35|
0000001b
utf-8 转 gbk 待续。。。
转载于:https://www.cnblogs.com/unsea/archive/2012/11/29/2795387.html
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- 简要介绍一下UTF-8编码和GBK编码------并利用linux中的iconv命令来实现UTF-8和GBK之间的相互转换
- linux 使用/proc文件系统 实现用户空间与内核模块之间通信
- 使用SAMBA协议实现Linux与Windows系统之间的文件共享
- 将windows下编辑好的文件(GBK)转换成Linux下的格式(UTF8)
- Linux 文件系统剖析: 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口
- 不同系统平台之间(Linux与Linux、Linux与Unix)利用NFS实现文件共享方法
- Java实现的utf8,gbk,unicode编码相互转换的代码
- 2.6 使用for循环遍历文件 2.7 使用while循环遍历文件 2.8 统计系统剩余的内存 2.9 数据类型转换计算(计算mac地址) 3.0 数据类型转换(列表与字典相互转换)
- 当两台LINUX主机之间要互传文件时可使用SCP命令来实现
- Java实现的utf8,gbk,unicode编码相互转换的代码
- dedecms网站GBK与UTF-8相互之间怎么转换
- 使用PuTTy实现windows和linux之间文件上传下载
- 使用vmware实现Window主机与Linux之间进行文件共享
- 使用rman做文件系统和raw设备之间的转换
- Linux 文件系统剖析: 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口
- utf-8与gbk相互转换c++实现
- 如何使用远程linux系统中ssh秘钥文件转换成putty可以使用的ppk文件
- linux 使用系统接口实现复制文件
- 使用java语言实现进制之间的相互转换
- ext2,ext3 文件系统之间的相互转换方法。