- 浏览: 899107 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (319)
- Thinking / 反思 (27)
- 我读的技术类图书 (3)
- 我读的非技术图书 (3)
- Java & Groovy (55)
- Ruby/Rails (9)
- Python (10)
- C/C++ (14)
- C# & .net (9)
- 互联网相关技术 (6)
- Database (6)
- Unix/Linux (6)
- WindowsDev (21)
- 工具使用 / Tips (62)
- 编程技术杂谈/咨讯 (6)
- 软工 / 敏捷 / 模式 (6)
- 易筋经 / 各种内功 (3)
- 充电 / 他学科知识 (6)
- 外语学习 (16)
- 我和宝宝的甜蜜生活 (24)
- 八卦 (3)
- 健康 (0)
- 无类别 (0)
- mTogether (4)
- 一页纸 (3)
- SAP (7)
- baby (2)
- abap (2)
- temp (1)
- network (1)
- 生活 (1)
最新评论
-
daliang1215:
收藏一下,好东西。 xp 的快捷键用的非常爽,到win7缺没有 ...
Windows7: 右键任务栏上的一个窗口, 用快捷键c关闭它 -
Alice南京:
感谢
Java GC 监视方法与工具 -
wjason:
今天在excel 2010上面写了一些代码,果然lookup有 ...
Excel 公式: 根据一个单元格的用户输入值, 自动设置另一个单元格的值 -
wjason:
因式分解:http://zh.wikipedia.org/wi ...
教孩子学编程: 数学题1 -
bbls:
不错 找了好久了
VS2010: 在Solution Explorer中,自动关联当前正在编辑的文件
标题:
"中文系统下打的zip压缩包, 日文系统下查看时文件名乱码问题"解决方案:
- 在压缩/解压缩zip包时, 指定文件名的编码方式
正文开始......
我们公司使用的操作系统是中文, 我们经常需要把一些文件压成zip包, 然后发给日本总公司,
当然, 日本同事使用的是日文操作系统.
这个时候, 如果zip包中所有文件都是ascii字符, 那么没问题,
否则, 如果zip包中包含汉语或者日语字符那么对方看到便会出现乱码.
原因在于:
无论是windows默认的zip压缩工具, 还是7-zip, 在zip压缩或者解压缩的时候,使用的都是系统默认编码来表示文件名,
也就是说windows上面是gb2312, 而日文windows上面用的是shift-jis
使用gb2312编码的zip文件名, 在日文windows上面使用shift-jis来查看, 自然是乱码的.
还有一类人, 应该也受这个问题所苦.
他们(也包括我)有时候会从日本的站点(share等)下载一些压缩包(漫画之类),
这些压缩包是在日文系统下压缩的, 如果文件名包含日语, 在我们中文的系统上解压就会出现乱码.
我以前的解决办法是弄一个日文的虚拟机,
无论是解压还是压缩都在虚拟机上进行.
(前一个公司, 日本和中国都使用日文的windows, 便没有这个问题)
然而为了一个压缩包就开要打开一个虚拟机,难免有些麻烦
所以我的期望是:
在压缩zip包,或者解压缩zip包时, 能够制定对文件名的编码方案.
比如我在中文系统上制作一个压缩包, 我可以指定: 对文件名使用日文编码进行编码.
这样以来, 在日文os上查看时,变不会产生乱码.
调查了一下, 这个问题可以通过DotNetZip 来解决,
DotNetZip对自己的介绍是: Zip and Unzip in C#, VB, any .NET language
给我们提供的资源也很贴心:
有源代码, dll, 还有基于这些源代码和dll的工具, 有命令行的, 也有GUI的zip工具,
这些工具也有源代码, 同时还提供了C#,VB等语言的例子(我看了一下, 集成到自己的程序中也很方便).
download 页面在这里.
我下载的是: DotNetZipLib-DevKit-v1.9.zip
解压缩之后在DotNetZipLib-DevKit-v1.9\Tools\路径下面,会有两个命令行工具: Zipit.exe 和 UnZip.exe
(其实还包括一个GUI工具,叫DotNetZip-WinFormsTool.exe, 不喜欢命令行的移步这里)
zipit.exe是压缩的命令行, UnZip.exe是解压缩, 他的参数类似, 都支持指定编码.
这次我使用的工具就是他们. 他们的命令行参数在这里
.
也可以从这个链接导航进来: DotNetZip - Zip file manipulation in .NET languages
使用这个命令行工具, 指定编码打zip包的方法如下:
上面的命令是压缩文件夹, 压缩文件的方式类似.
其中cp这个参数指的是code page. 不同系统对于同一种编码的code page可能会不同, 详参Code page@wikipedia
如何知道一个编码对应的code page呢?
可以通过如下代码取得(C#为例), 或者google吧.
根据结果, 日文windows的默认编码shift-jis对应的code page是932.
var cp_shiftjis = System.Text.Encoding.GetEncoding("shift-jis").CodePage; var cp_eucjp = System.Text.Encoding.GetEncoding("euc-jp").CodePage; var cp_gbk = System.Text.Encoding.GetEncoding("GBK").CodePage; var cp_gb2312 = System.Text.Encoding.GetEncoding("gb2312").CodePage;
然而使用上面的命令行, 每次输入的参数还是太多,于是我写了一个ruby脚本包装了一下上面的命令行.
这个脚本每次只接受一个参数, 他代表一个文件或者文件夹.
他的功能是, 在跟输入参数相同的文件夹下, 创建一个同名的.zip文件.
相当于7-zip邮件菜单中的: 添加到 "XXX.zip"
使用这个脚本的前提是你要将zipit.exe放到path中
# encoding : utf-8 def show_usage_and_exit(msg) puts "please input the path to zip" puts "error msg: #{msg}" exit 0 end show_usage_and_exit("no path to zip") unless ARGV.length == 1 #puts ARGV[0].dup.force_encoding("GBK").encode('utf-8') zip_input = ARGV[0].dup.encode('utf-8') show_usage_and_exit("path does not exist") unless File.exist? zip_input if File.directory? zip_input zip_output = zip_input + ".zip" else zip_output = zip_input.gsub(/\.\w{2,4}\z/,".zip") end File.delete zip_output if File.exist? zip_output zip_cmd = "#{%Q<Zipit.exe "#{zip_output.encode("GBK")}" -r+ -cp 932 "#{zip_input.encode("GBK")}">}" puts "the path to zip is:\n\t" + zip_input; puts "the target path is:\n\t" + zip_output; puts "the zip command is:\n\t" + zip_cmd.encode("utf-8"); puts "\n------------------------------ zip process start...---------------------\n\n" #puts `#{zip_cmd}` puts `#{zip_cmd}`.encode("utf-8")
在windows上面, 除了7-zip, 和DotNetZip以外,
还可以使用一些其他的命令和脚本, 来制作zip包.
参下面这些链接:
Can you zip a file from the command prompt using ONLY Windows' built-in capability to zip files?
Does Windows have a built-in ZIP command for the command line?
Can Windows' built-in ZIP compression be scripted?
Zip and UnZip Files Using the Windows Shell (XP, Vista, 2003 and 2008) and VBScript
-----------------------------------------------------------------------------------------------------------------------------
追记:2012.07.02
-----------------------------------------------------------------------------------------------------------------------------
重新新封装了一下这个ruby脚本,
在一个脚本中同时支持zip和unzip.
如果输入参数不是以.zip扩展名结尾, 那么使用日文系统的编码, 将其在当前文件夹中压缩.
如果输入参数是以.zip扩展名结尾, 那么使用日文系统的编码, 将其在当前文件夹中解压.
其中用到zipit和unzipit两个命令
zipit是把DotNetZipLib的命令行工具直接拷贝path中,
unzipit是把DotNetZipLib的叫做unzip.exe的命令改名而来.
# encoding : utf-8 def show_usage_and_exit(msg) puts "please input the path to zip" puts "error msg: #{msg}" exit 0 end def check_parameter show_usage_and_exit("no path to zip") unless ARGV.length == 1 show_usage_and_exit("path does not exist") unless File.exist? ARGV[0].dup.encode('utf-8') puts "===your input is===:\n" + ARGV[0].dup.encode('utf-8') end def run_cmd(cmd) puts "===the command is===:\n" + cmd.encode("utf-8") + "\n\n---------- command start...------------\n" puts `#{cmd}`.encode("utf-8") #puts `#{cmd}` end def to_zip_cmd(input_str) if File.directory? input_str zip_output = input_str + ".zip" else zip_output = input_str.gsub(/\.\w{2,4}\z/,".zip") end File.delete zip_output if File.exist? zip_output "#{%Q<Zipit.exe "#{zip_output.encode("GBK")}" -r+ -cp 932 "#{input_str.encode("GBK")}">}" end def to_unzip_cmd(input_str) "#{%Q<Unzipit.exe -cp 932 -d "#{File.dirname(input_str).encode("GBK")}" "#{input_str.encode("GBK")}">}" end check_parameter input_str = ARGV[0].dup.encode('utf-8') # ;puts ARGV[0].dup.force_encoding("GBK").encode('utf-8') if input_str.end_with? '.zip' run_cmd(to_unzip_cmd input_str) else run_cmd(to_zip_cmd input_str) end
评论
C:\> assoc .rb=RubyScript
C:\> ftype RubyScript="C:\ruby1.9\bin\ruby.exe %1 %*
省掉每次都键入.rb
C:\> set PATHEXT=.rb;%PATHEXT%
发表评论
-
批量替换,一个文件夹中, 所有文件中的某个特定字符串(For Lync Update)
2015-10-10 10:31 1971因为Office升级, 需要对所有的脚本内容, 做如下字符 ... -
Snagit: "在截图中自动添加时间戳"功能的开启与关闭
2015-07-21 16:27 1628Snagit有这样一个功能 - "在截图中自动添 ... -
教孩子学编程: 幻方及其编程求解
2015-03-03 08:40 937旨在培养孩子们对编程,科学的兴趣. 幻方(M ... -
教孩子学编程: 数学题1
2014-02-08 13:59 1336我想有一天, 我会教孩子们编程. 下面一个很有趣的例子. ... -
网易公开课 - 让我们教孩子编码吧
2014-01-05 15:44 1365看了这个网易公开课. http://v.163.com/m ... -
Alias for Command Parameter for Bash
2013-12-30 12:25 1451bash的alias(别名)不直接支持$1,$2,$3,这 ... -
grep tools on windows
2013-12-28 19:52 1372最开始一直使用这个工具. FileLocator Lit ... -
VIM: 编写自己的“高亮显示syntax文件"
2013-10-13 08:52 957The following link is very use ... -
AutoHotKey: 从资源管理器中,获取被选择的文件的路径(及文件夹)的API
2013-10-12 11:49 7152从下面的URL中,获得了这个Library. Ge ... -
Everything Command Line Option
2013-09-14 10:56 1282Run "everything --help&q ... -
Links
2013-07-27 21:03 1156Reference Card DZone refc ... -
Wireshark Filters
2013-06-23 16:18 1713Wireshark是一款非常好用的网络抓包工具: htt ... -
在linux的VMware虚拟机中, 无法访问VMware的Shared Folders
2013-06-11 21:41 2420在一个VMware虚拟机的Setting中可以设置Shar ... -
Excel条件格式: 根据某一列单元格的值, highlight整行
2013-06-11 10:43 13811[追记 about excel Conditional F ... -
绿色安装ruby后,进行的一些设置,让.rb脚本可以直接运行
2013-06-08 13:27 1300在XP时代,我们可以在【资源管理器 - 工具 - 文件夹选项 ... -
Ruby:使用Ruby脚本,快捷切换鼠标左右手习惯
2013-06-08 12:37 1350在下面这篇博客里,我使用C#,写了一个命令,可以快捷的切换 ... -
VIM: 查看log文件时的一些技巧, 关于如何展示搜索结果
2013-05-25 08:21 2267最近的学习工作中, 查看log文件需求特别多, 于是我对 ... -
Vim: Windows7中, 通过右键菜单加快捷键v, 快速启动vim
2013-05-22 14:39 3636在xp时代, 安装了vim之 ... -
Windows7: 右键任务栏上的一个窗口, 用快捷键c关闭它
2013-05-10 21:34 3427右键任务栏上的一个窗口, 在弹出菜单之后, 按下字母c, ... -
Windows 7: 单显示器, 窗口布局快捷键
2013-05-09 17:24 1712使用但显示器, 尤其是使用笔记本的用户, 应该有过这样的感 ...
相关推荐
"zip库(解决文件名中文乱码问题).zip" 提供了一个针对C++编程语言的解决方案,专门用于处理ZIP文件中中文文件名的乱码问题。这个问题在处理包含非ASCII字符(例如中文字符)的文件时经常出现,因为标准的ZIP库可能不...
在日本经常使用zip或者lha格式的压缩包,在中文系统下解压时,如果压缩包里的文件是日语名,虽然能正常解压,但是解出的文件会变成乱码。这实际上是日语系统使用Shift-JIS编码,在中文系统下解压时按照GB编码显示...
项目中碰到问题.jdk zipEntry 压缩中文文件名乱码 上网查了下,有两种方法,一种修改jdk ZipInputStream及ZipOutputStream 的源文件,比较麻烦,不建议此项. 第二种 就是拿来主义,因为 开源项目 Ant 里已经有...
在Java编程中,处理压缩和解压缩ZIP文件是一项常见的任务,尤其当文件中包含中文字符时,可能会遇到中文乱码的问题。这是因为Java的标准库在处理非ASCII编码时可能存在不足。本篇文章将详细介绍如何使用Java标准库...
当处理非ASCII字符(如中文、日文等)的文件名时,可能会出现乱码。这是因为ZIP格式默认使用的是老式的CP437编码,不支持Unicode。为了解决这个问题,我们需要在创建`ZipEntry`时指定合适的编码,例如UTF-8: ```...
通过上述步骤,可以实现基于Java向ZIP压缩包追加文件的功能,虽然这个过程涉及解压和再压缩,但它是最常见的解决方案,因为Java的标准库不直接支持追加操作。在实际应用中,可以根据具体需求进行优化和调整,以满足...
本文将深入探讨如何使用SharpCompress这一开源库来处理ZIP和RAR文件,并解决在处理中文文件名时可能出现的乱码问题。 SharpCompress是一款强大的、跨平台的压缩库,支持多种压缩格式,包括ZIP、TAR、GZIP、BZIP2、7...
本篇文章将深入探讨如何在Android平台上解决Java ZIP库在解压缩中文文件时出现的乱码问题。 首先,我们要明白乱码问题的根源。在文件的压缩和解压缩过程中,文件名通常被编码为字节序列,这个序列取决于原始文件名...
为了解决这个中文乱码问题,我们需要在创建ZipEntry时指定合适的字符集,通常是UTF-8。下面是一个示例代码片段,展示了如何创建一个包含中文文件名的ZIP文件: ```java import java.io.*; import java.util.zip.*; ...
在Linux环境下,对rar和zip压缩包进行批量替换文件的操作是一项常见的系统管理任务。这通常涉及到脚本编程,以便自动化处理大量的压缩文件。标题提到的`zip_replace.sh`和`rar_replace.sh`就是两个用于执行这个任务...
解决java压缩zip文件时的中文乱码问题 实现:java压缩文件成zip实现无乱码。 包括:写好的工具类与jar包。 使用方法:导入ant.jar包,调用CompressExcelOperate中的方法,即可实现压缩文件,并保证没有中文乱码...
本文将详细讨论如何从一个名为“取压缩包中全部文件名.rar”的RAR压缩包中提取所有文件的名称,以及这一操作背后的原理和技术。 RAR是一种流行的压缩格式,由尤金·罗沙利克开发,它提供了比ZIP更高的压缩率和更...
本文将深入探讨ZIP解压缩乱码的解决方案,帮助你解决这个问题。 1. **理解字符编码** - 字符编码是计算机存储和显示文本的方式,常见的有ASCII、GBK、UTF-8等。不同的编码方式对于特殊字符的表示不同,如果编码不...
多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...
批量解压多个zip压缩包并将解压出来的文件以该压缩包的名称重命名(跟要处理的文件放一起运行) 需要安装WinRAR软件。
在Java编程环境中,创建一个能够加密和解密ZIP压缩包的项目是一项常见的需求,尤其是在处理敏感数据时。本文将深入探讨如何使用Java实现这一功能,同时也会提及与ActionScript 3(AS3)进行加密解密的相关知识。 ...
易语言是一种专为中国人设计的编程语言,它以简体中文作为编程语句,使得非计算机专业背景的用户也能较为容易地学习编程。在易语言中处理压缩包文件,特别是获取压缩包内的所有文件名,是一项常见的操作。下面将详细...
在Java编程中,使用FTPClient进行文件传输时,可能会遇到一个常见的问题,即当尝试创建中文目录或上传具有中文名称的文件时,这些目录名和文件名会显示为乱码,通常表现为“??”这样的形式。这个问题主要是由于FTP...
在Ubuntu系统中阅读Windows环境下生成的PDF文件时,如果遇到中文乱码问题,可以安装poppler-data来解决。安装poppler-data的命令是sudo apt-get install poppler-data。 综上所述,解决Ubuntu与Windows在文件处理时...
ZIP 压缩包破解,明文攻击,暴力破解,CRC碰撞,伪加密C++ 源代码