gpt4 book ai didi

c# - 具有 utf-8 文件名的 Zip 文件

转载 作者:太空狗 更新时间:2023-10-29 21:58:35 25 4
gpt4 key购买 nike

在我的网站上,我可以选择下载用户上传的所有图片。问题出在带有希伯来文名称的图像中(我需要文件的原始名称)。我试图解码文件名,但这无济于事。这是一个代码:

using ICSharpCode.SharpZipLib.Zip;

Encoding iso = Encoding.GetEncoding("ISO-8859-1");
Encoding utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(file.Name);
byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
string name = iso.GetString(isoBytes);

var entry = new ZipEntry(name + ".jpg");
zipStream.PutNextEntry(entry);
using (var reader = new System.IO.FileStream(file.Name, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
{
byte[] buffer = new byte[ChunkSize];
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
byte[] actual = new byte[bytesRead];
Buffer.BlockCopy(buffer, 0, actual, 0, bytesRead);
zipStream.Write(actual, 0, actual.Length);
}
}

在 utf-8 编码后,我得到这样的希伯来文文件名:??????.jpg我的错误在哪里?

最佳答案

Unicode(UTF-8 是二进制编码之一)比其他 8 位编码可以表示更多的字符。此外,您没有进行适当的转换,而是进行了重新解释,这意味着您的文件名得到了垃圾。你真的应该阅读来自 Joel on Unicode 的文章.

...

既然你已经阅读了这篇文章,你应该知道在 C# 中字符串可以存储 unicode 数据,因此你可能不需要对 file.Name< 进行任何转换 如果库不包含编码处理错误,则可以将其直接传递给 ZipEntry 构造函数(这总是可能的)。

关于c# - 具有 utf-8 文件名的 Zip 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967853/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com