Như được đề xuất trong the accepted answer, Sử dụng nén dữ liệu không hoạt động để rút ngắn đường dẫn URL đã quá ngắn.
DotNetZip có lớp DeflateStream hiển thị phương pháp tĩnh (Được chia sẻ trong VB) CompressString. Đó là cách một dòng để nén chuỗi bằng DEFLATE (RFC 1951). Việc thực hiện DEFLATE hoàn toàn tương thích với System.IO.Compression.DeflateStream, nhưng DotNetZip nén tốt hơn. Dưới đây là cách bạn có thể sử dụng nó:
string[] orig = {
"folder1/folder2/page1.aspx",
"folderBB/folderAA/page2.aspx",
};
public void Run()
{
foreach (string s in orig)
{
System.Console.WriteLine("original : {0}", s);
byte[] compressed = DeflateStream.CompressString(s);
System.Console.WriteLine("compressed : {0}", ByteArrayToHexString(compressed));
string uncompressed = DeflateStream.UncompressString(compressed);
System.Console.WriteLine("uncompressed: {0}\n", uncompressed);
}
}
Sử dụng mã mà, đây là kết quả xét nghiệm của tôi:
original : folder1/folder2/page1.aspx
compressed : 4bcbcf49492d32d44f03d346fa0589e9a9867a89c5051500
uncompressed: folder1/folder2/page1.aspx
original : folderBB/folderAA/page2.aspx
compressed : 4bcbcf49492d7272d24f03331c1df50b12d3538df4128b0b2a00
uncompressed: folderBB/folderAA/page2.aspx
Vì vậy, bạn sẽ nhìn thấy "nén" mảng byte, khi đại diện trong hex, dài hơn bản gốc, dài khoảng 2x. Lý do là một byte hex thực sự là 2 ký tự ASCII.
Bạn có thể bù đắp phần nào cho điều đó bằng cách sử dụng base-62, thay vì base-16 (hex) để biểu thị số. Trong trường hợp đó a-z và A-Z cũng là các chữ số, cho bạn 0-9 (10) + a-z (+26) + A-Z (+26) = 62 tổng số. Điều đó sẽ rút ngắn sản lượng đáng kể. Tôi đã không thử điều đó. chưa.
EDIT
Ok Tôi đã thử nghiệm encoder Base-62. Nó rút ngắn chuỗi hex khoảng một nửa. Tôi nghĩ rằng nó sẽ cắt giảm đến 25% (62/16 = ~ 4) Nhưng tôi nghĩ rằng tôi đang mất một cái gì đó với discretization. Trong các thử nghiệm của tôi, chuỗi được mã hóa cơ sở-62 kết quả có cùng độ dài với URL gốc. Vì vậy, không, bằng cách sử dụng nén và sau đó mã hóa base-62 vẫn không phải là một cách tiếp cận tốt. bạn thực sự muốn có giá trị băm.
Tại sao? Có lẽ có một cách tốt hơn để làm những gì bạn đang yêu cầu. –
"Tại sao" chắc chắn là một câu trả lời hay. Tuy nhiên, như một lưu ý phụ, Huffman mã hóa hoạt động tuyệt vời cho nén văn bản đơn giản mà không cần phải nghỉ mát để các thư viện bên ngoài và nén LZW. –
bản sao có thể có của [Thuật toán nén tốt nhất cho chuỗi văn bản ngắn] (http://stackoverflow.com/questions/1138345/best-compression-algorithm-for-short-text-strings) –