Delphi中System.Zip中文文件名乱码解决

新版本Delphi中自带的Zip单元System.Zip使用很方便,但是在压缩文件中包含中文路径或文件名时解压后是乱码,这一点儿确实挺烦人。

之所以会出现乱码是由以下两个函数造成的:

 1 function TZipFile.TBytesToString(B: TBytes): string;
 2 var
 3   E: TEncoding;
 4 begin
 5   if FUTF8Support then
 6     E := TEncoding.GetEncoding(65001)
 7   else
 8     E := TEncoding.GetEncoding(437);
 9   try
10     Result := E.GetString(B);
11   finally
12     E.Free;
13   end;
14 end;
 1 function TZipFile.StringToTBytes(S: string): TBytes;
 2 var
 3   E: TEncoding;
 4 begin
 5   if FUTF8Support then
 6     E := TEncoding.GetEncoding(65001)
 7   else
 8     E := TEncoding.GetEncoding(437);
 9   try
10     Result := E.GetBytes(S);
11   finally
12     E.Free;
13   end;
14 end;

将上面红色标记的代码中CodePage修改为936即可解决,或者直接替换掉这两个函数:

1 function TZipFile.TBytesToString(B: TBytes): string;
2 begin
3   if FUTF8Support then
4     Result := TEncoding.UTF8.GetString(B)
5   else
6     Result := TEncoding.Default.GetString(B);
7 end;
1 function TZipFile.StringToTBytes(S: string): TBytes;
2 begin
3   if FUTF8Support then
4     Result := TEncoding.UTF8.GetBytes(S)
5   else
6     Result := TEncoding.Default.GetBytes(S);
7 end;

原文地址:https://www.cnblogs.com/huixch/p/9839422.html

时间: 2024-11-08 21:18:31

Delphi中System.Zip中文文件名乱码解决的相关文章

SpringCloud上传文件,经过Zuul,中文文件名乱码解决办法

SpringCloud上传文件,经过Zuul,中文文件名乱码解决办法 2018-03-17 最近在使用SpringCloud搭建微服务的过程中,发现上传文件经过Zuul网关转发的时候,回应为上传文件名中文乱码导致文件的写操作失败,从而导致文件上传失败,但是不经过Zuul转发的时候,文件上传正常,因此猜测是Zuul对上传的请求的编码进行了处理.最终在网上找到了两种解决方案: 方案一.在上传文件的请求路径之前添加字符串“zuul”声明此请求的编码不做处理. 1 2 3 4 5 6 7 8 9 10

linux下中文文件名乱码解决

在windows上使用ftp上传文件到Linux上,中文名称在Linux系统中显示为乱码.虽然将Linux的env设置了LANG=en_US.UTF-8,并且本地的Shell客户端编码也设置成UTF-8,但在Shell中(或通过http访问),仍是乱码…… 原因在于,Windows 的文件名中文编码默认为GBK,压缩或者上传后,文件名还会是GBK编码,而Linux中默认文件名编码为UTF8,由于编码不一致所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码. yum install co

从内存中写入mysql中文数据乱码解决

一. 问题 数据库编码:utf8 mysql> create database dbnameDEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 表编码:utf8 drop table if exists `test`; create table `test` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'ID', `name` varchar(50) default '', `create

Ubuntu下解决解压zip文件中文文件名乱码问题

在Ubuntu下解压Windows下压缩的zip文件时,会出现解压出的带中文文件名的文件名乱码,这是因为Ubuntu和Windows默认的编码不同,Ubuntu下默认的编码是UTF-8,而Windows下默认的编码是GBK.对于这个问题,主要有以下三种解决方法: 一.命令行指定解压字符集 在Ubuntu下解压来源于Windows的zip文件,中文文件名会出现乱码问题. 出现这个问题的原因是:Windows和Ubuntu使用的默认编码不相同,而且zip文件自身却不带有任何标识其编码的信息.解决方案

通过freemarker出word的技术解决方案_通过点击一个按钮临时实现生成一个word,解决出word时中文文件名乱码问题,解决打开出word时打开的word出现问题的问题,出图片,解决动态列表

 通过freemarker制作word比较简单 步骤:制作word模板.制作方式是:将模板word保存成为xml----在xml的word模板中添加相应的标记----将xml的word文件的后缀名改成ftl文件 详细步骤如下: 模板制作(将要动态显示的数据打上标记,这个标记是freemarker中的EL标记,要注意的是,要控制值为空的情况,下面${(site.wzmc)?default("")}标识当网站名称为空的时候显示空值,如果这里如果不做控制,在实际项目中会显示错误!) 另外

Struts2 .apk 文件下载及解决中文文件名乱码问题(转)

1.Tomcat服务器不能下载 .apk类型文件 Android的APK安装包不能下载或下载文件是以 .zip为后缀名而不是 .apk为文件后缀名时,需在 Tomcat 的 web.xml 配置文件中加入以下 MIME 类型: 1 <mime-mapping> 2 <extension>apk</extension> 3 <mime-type>application/vnd.android.package-archive</mime-type>

http中 get方法 传送中文参数乱码解决办法

http传送参数有两种方法:get 和post  当时使用get方法传递中文参数是会有乱码现象 解决办法: 1.在jsp压面url后面的参数使用 encodeURI:"&zxbghy="+ encodeURI(zxbghy) 2.在后台java获取参数时使用字节数组:temphgdmhy = new String(hgdmhy.getBytes("ISO-8859-1"), "UTF-8");  案例,用get方法传递两个中文参数:zxb

解决文件下载在火狐浏览器出现中文文件名乱码的方法

笔者最近写了个导出Excel的工具,后面发现在火狐浏览器下载的文件的文件名是一串看不懂的字母. 后面找到了解决方法,下面直接上代码. /** 下载时文件名为中文:乱码解决 */ // 响应的过程: // 服务器: utf-8|gbk --> iso8859-1 浏览器: iso8859-1 --> utf-8|gbk (firefox.chrome) // 服务器: gbk --> iso8859-1 浏览器: iso8859-1 --> gbk (msie) fileName =

php上传文件中文文件名乱码的解决方法

想必很多朋友在进行utf8编码的php开发上传功能的时候,都会遇到这样的一个问题,就是上传中文文件名的文件时,文件名会变成乱码,其实我们可以用iconv函数对文件名进行重新编码就解决问题了 可能会有不少朋友碰到一些问题就是上传文件时如果是英文倒好原文名不会有问题,如果是中文可能就会出现乱码了,今天我来给大家总结一下导致乱码php上传文件中文文件名乱码的原因与解决办法吧. 这几天在windows下安装了XAMPP,准备初步学习一下php的相关内容.这几天接触到了php上传文件,但是出现了一个郁闷问