當前位置:首頁 » 文件管理 » 字元無法壓縮

字元無法壓縮

發布時間: 2022-07-20 18:47:15

❶ 今天發現c#在做字元串壓縮的時候的一個bug

NO,NO,事實上默認的Default是指你的操作系統當前所使用的編碼類型,在中國一般來說是UTF-8

如果你要指定的話可以用Encoding.UTF-8

但是解壓的時候也要用同一種編碼形式,否則就會出錯。。。

補充:剛剛收到你的信息了,你把字元串壓縮之後,卻又用Encoding.GetString方法來得到字元串,我想錯就錯在這一步,你應該直接把它(也就是所得到的位元組數組)以二進制的形式寫進文件文件的後綴你可以自定義一個也沒問題,然後讀取的時候再從文件中讀取出來。

簡單地說就是把兩個 CompressString2String,DecompressString2String兩個函數修改一下:
注釋:按鈕一為壓縮(把textBox1中的文本進行壓縮然後寫入date.dt文件)
按鈕一為壓縮(把date.dt文件的數據讀出來進行解壓縮並且顯示在textBox2中)

static void Compress(Stream source, Stream dest)
{
using (GZipStream zipStream = new GZipStream(dest, CompressionMode.Compress, true))
{
byte[] buf = new byte[1024];
int len;
while ((len = source.Read(buf, 0, buf.Length)) > 0)
zipStream.Write(buf, 0, len);
}
}

static void Decompress(Stream source, Stream dest)
{
using (GZipStream zipStream = new GZipStream(source, CompressionMode.Decompress, true))
{
byte[] buf = new byte[1024];
int len;
while ((len = zipStream.Read(buf, 0, buf.Length)) > 0)
dest.Write(buf, 0, len);
}
}

public static bool CompressString2String(string strSource)
{
using (MemoryStream msSrc = new MemoryStream(Encoding.UTF8.GetBytes(strSource)))
using (MemoryStream msTgt = new MemoryStream())
{
Compress(msSrc, msTgt);
File.WriteAllBytes(Application.StartupPath+"data.dt",msTgt.ToArray());
}
return true;
}

public static string DecompressString2String()
{
using (MemoryStream msSrc = new MemoryStream(File.ReadAllBytes(Application.StartupPath + "data.dt")))
using (MemoryStream msTgt = new MemoryStream())
{
Decompress(msSrc, msTgt);
return Encoding.UTF8.GetString(msTgt.ToArray());
}
}

private void button1_Click(object sender, EventArgs e)
{
MessageBox.Show(CompressString2String(textBox1.Text).ToString()+"Success!");
}

private void button2_Click(object sender, EventArgs e)
{
textBox2.Text = DecompressString2String();
}

再補充:
我想問一下,你要實現的是字元串加密?還是用於網路發送?
如果你是想把一個字元串轉化為另一種形式,讓別人看不懂,那就用加密技術,如果,是想實現將字元發送到遠程,也可以把我說的文件流改寫為網路流,但是你說的字元串轉換,我實在不明白?
要知道,字元串本身是由位元組數組組成,當你加壓之後,它本身的順序就會被打亂,而你UTF-8的字元集是有限的(不是任意的位元組組合都可以被認為是字元的),
簡單地說就是像你那樣做,你把加壓後的位元組數組(經過壓縮演算法轉換後的二進制數據)再轉化為字元串,就會造成數據丟失的情況,於是操作也就不會成功了。

c語言字元串如何壓縮

話說B數組不應該是整形呀,不然不能保存字母了。以下是我的代碼。。。

#include<iostream>

#include<string.h>

#include<stdio.h>

usingnamespacestd;


voidyasuo(chara[],charb[])

{

intcount=1,p=0;

for(inti=0;i<strlen(a);i++)

if(a[i]==a[i+1])

count++;

elseif(count>2)

{

b[p++]=(char)(count+'0');

b[p++]=a[i];

count=1;

}

elseif(count==2)

{

b[p++]=a[i];

b[p++]=a[i];

count=1;

}

else

b[p++]=a[i];

}

voidprintB(charb[])

{

cout<<b<<endl;

}

voidbackB(charb[])

{

for(inti=0;i<strlen(b);i++)

if(b[i]<='9'&&b[i]>='3')

{

for(intj=0;j<(int)(b[i]-'0');j++)

cout<<b[i+1];

i++;

}

else

cout<<b[i];

cout<<endl;

}

intmain()

{

chara[1000]={0},b[1000]={0};

gets(a);

yasuo(a,b);

printB(b);

backB(b);

}

❸ 壓縮包裡面的文件有特殊符號解壓不了!

這個是rar的壓縮文件吧
這個符號應該是說這個壓縮包是分卷壓縮包,這個voice.noa有一部分在另外一個壓縮分卷里,所以解壓不了。
因為windows文件名中不會出現「<」這個符號的。
你在哪下載的,把各個分卷都下載了,再解壓應該就好了

❹ 為什麼我的電腦壓縮不了文件

使用zip壓縮。

簡單的說,就是經過壓縮軟體壓縮的文件叫壓縮文件,壓縮的原理是把文件的二進制代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0 的寫法60,來減少該文件的空間。

壓縮文件的基本原理是查找文件內的重復位元組,並建立一個相同位元組的"詞典"文件,並用一個代碼表示,比如在文件里有幾處有一個相同的詞"中華人民共和國"用一個代碼表示並寫入"詞典"文件,這樣就可以達到縮小文件的目的。

把文件的二進制代碼壓縮,把相鄰的0,1代碼減少,比如有000000,可以把它變成6個0 的寫法60,來減少該文件的空間。

由於計算機處理的信息是以二進制數的形式表示的,因此壓縮軟體就是把二進制信息中相同的字元串以特殊字元標記來達到壓縮的目的。

❺ 這個是為什麼啊,不能壓縮它包括無法在壓縮文件夾中使用的字元

如果沒記錯,不管是RAR還是ZIP,都是不支持空字元的。所以,檢查下用戶名吧。
檢查下,劉向依.png」
是不是有空格

比如這個「劉向依
.png」
就有一個空格

熱點內容
伺服器關閉了電腦網路還能用 發布:2025-01-25 08:22:28 瀏覽:587
熱血航線的登錄密碼在哪裡可以看 發布:2025-01-25 08:22:27 瀏覽:769
5系怎麼選擇配置 發布:2025-01-25 08:22:18 瀏覽:842
pythonscipy 發布:2025-01-25 08:18:52 瀏覽:418
恕瑞瑪伺服器地址 發布:2025-01-25 08:18:51 瀏覽:801
oa源碼php 發布:2025-01-25 08:11:31 瀏覽:734
gpc腳本 發布:2025-01-25 08:10:47 瀏覽:317
雲伺服器和伺服器的區別 發布:2025-01-25 08:10:39 瀏覽:547
python寫文件追加 發布:2025-01-25 08:09:54 瀏覽:778
ftp跳到瀏覽器 發布:2025-01-25 08:09:54 瀏覽:528