unity C# basic64压缩文本
时间: 2025-07-23 21:51:20 浏览: 2
<think>我们有两个任务:Base64编码和文本压缩。在Unity中使用C#实现这两者都很简单,因为C#本身提供了相关库。
1. Base64编码:
Base64是一种将二进制数据编码成ASCII字符串的方法。在C#中,我们可以使用`Convert.ToBase64String`和`Convert.FromBase64String`进行编码和解码。
2. 文本压缩:
文本压缩可以使用GZipStream或DeflateStream(它们都是System.IO.Compression命名空间下的类)来实现。压缩后的数据通常是二进制,我们可以将其转换为Base64字符串以便于传输或存储。
下面分别给出实现方法:
### 1. Base64编码
**编码:** 将字符串转换为Base64字符串
```csharp
using System;
using System.Text;
public static string EncodeBase64(string plainText)
{
var plainTextBytes = Encoding.UTF8.GetBytes(plainText);
return Convert.ToBase64String(plainTextBytes);
}
```
**解码:** 将Base64字符串还原为原始字符串
```csharp
public static string DecodeBase64(string base64EncodedData)
{
var base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.UTF8.GetString(base64EncodedBytes);
}
```
### 2. 文本压缩(使用GZipStream)
压缩并转换为Base64字符串(因为压缩后是二进制,所以通常需要Base64编码以便作为文本处理):
```csharp
using System.IO;
using System.IO.Compression;
using System.Text;
public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
using (var memoryStream = new MemoryStream())
{
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
{
gzipStream.Write(buffer, 0, buffer.Length);
}
memoryStream.Position = 0;
var compressedData = memoryStream.ToArray();
return Convert.ToBase64String(compressedData);
}
}
```
解压缩(从Base64字符串解压缩):
```csharp
public static string Decompress(string compressedText)
{
byte[] compressedData = Convert.FromBase64String(compressedText);
using (var compressedStream = new MemoryStream(compressedData))
using (var decompressionStream = new GZipStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
decompressionStream.CopyTo(resultStream);
return Encoding.UTF8.GetString(resultStream.ToArray());
}
}
```
注意:压缩方法返回的是Base64字符串,这样可以直接作为文本使用。如果你不需要文本形式,也可以返回字节数组,但通常为了方便传输(如JSON),我们会将其转为Base64字符串。
### 使用示例:
```csharp
void Start()
{
string originalText = "这是一段需要压缩的文本,可能很长,压缩后可以节省空间。";
// 压缩并Base64编码
string compressedBase64 = Compress(originalText);
Debug.Log("压缩后的Base64字符串: " + compressedBase64);
// 解压缩
string decompressedText = Decompress(compressedBase64);
Debug.Log("解压缩后的文本: " + decompressedText);
// 测试Base64编码(不压缩)
string base64Encoded = EncodeBase64(originalText);
Debug.Log("Base64编码: " + base64Encoded);
Debug.Log("Base64解码: " + DecodeBase64(base64Encoded));
}
```
### 注意事项:
1. **压缩适用性**:文本较长时压缩效果明显,短文本可能越压越大(因为压缩头部有固定开销)。
2. **异常处理**:在实际应用中,需要添加异常处理(如try-catch)来应对无效数据。
3. **性能**:对于大文本,压缩和解压缩操作可能会造成性能开销,建议在后台线程进行。
如果你需要其他压缩算法(如Brotli),在.NET Core 3.0+中提供了`BrotliStream`,但注意Unity的.NET版本支持情况。目前Unity 2021.3使用的是.NET Standard 2.1,所以支持BrotliStream。用法与GZipStream类似。
使用BrotliStream压缩(如果Unity版本支持):
```csharp
using System.IO;
using System.IO.Compression;
using System.Text;
public static string CompressWithBrotli(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
using (var memoryStream = new MemoryStream())
{
using (var brotliStream = new BrotliStream(memoryStream, CompressionLevel.Optimal, true))
{
brotliStream.Write(buffer, 0, buffer.Length);
}
memoryStream.Position = 0;
var compressedData = memoryStream.ToArray();
return Convert.ToBase64String(compressedData);
}
}
public static string DecompressWithBrotli(string compressedText)
{
byte[] compressedData = Convert.FromBase64String(compressedText);
using (var compressedStream = new MemoryStream(compressedData))
using (var decompressionStream = new BrotliStream(compressedStream, CompressionMode.Decompress))
using (var resultStream = new MemoryStream())
{
decompressionStream.CopyTo(resultStream);
return Encoding.UTF8.GetString(resultStream.ToArray());
}
}
```
在Unity中使用BrotliStream需要确认项目设置的API Compatibility Level支持.NET 4.x或.NET Standard 2.1。在Unity 2021.3中,通常已经支持。
根据引用[1]中提到的Unity版本(2021.3.44),应该支持BrotliStream。
因此,你可以根据需求选择GZip或Brotli。Brotli通常有更好的压缩率,但压缩速度可能稍慢。
现在,你可以根据上述代码示例在Unity中实现Base64编码和文本压缩了。</think>在 Unity 中使用 C# 实现 Base64 编码和文本压缩非常简单,以下是完整实现方法:
### 一、Base64 编码实现
Base64 是一种将二进制数据转换为 ASCII 字符串的编码方式,常用于数据传输和存储。
```csharp
using System;
using System.Text;
public class Base64Utils
{
// Base64 编码
public static string Encode(string plainText)
{
byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
return Convert.ToBase64String(plainTextBytes);
}
// Base64 解码
public static string Decode(string base64EncodedData)
{
byte[] base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.UTF8.GetString(base64EncodedBytes);
}
}
// 使用示例:
void Start()
{
string original = "Unity 2021.3.44 开发指南";
// 编码
string encoded = Base64Utils.Encode(original);
Debug.Log($"Base64 编码结果: {encoded}");
// 输出类似: VW5pdHkgMjAyMS4zLjQ0IOiHs+aApyDnrqHnkIY=
// 解码
string decoded = Base64Utils.Decode(encoded);
Debug.Log($"解码后内容: {decoded}");
// 输出: Unity 2021.3.44 开发指南
}
```
### 二、文本压缩实现(使用 GZip)
当需要处理大文本时,可以使用压缩减少数据大小:
```csharp
using System.IO;
using System.IO.Compression;
using System.Text;
public class TextCompression
{
// 压缩文本
public static string Compress(string text)
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
using (var memoryStream = new MemoryStream())
{
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Compress, true))
{
gzipStream.Write(buffer, 0, buffer.Length);
}
return Convert.ToBase64String(memoryStream.ToArray());
}
}
// 解压文本
public static string Decompress(string compressedText)
{
byte[] gzipBuffer = Convert.FromBase64String(compressedText);
using (var memoryStream = new MemoryStream(gzipBuffer))
using (var gzipStream = new GZipStream(memoryStream, CompressionMode.Decompress))
using (var decompressedStream = new MemoryStream())
{
gzipStream.CopyTo(decompressedStream);
return Encoding.UTF8.GetString(decompressedStream.ToArray());
}
}
}
// 使用示例:
void Start()
{
string longText = "这是一段需要压缩的长文本...(此处可以是任意长文本)";
// 压缩
string compressed = TextCompression.Compress(longText);
Debug.Log($"压缩后大小: {compressed.Length} 字符");
// 解压
string decompressed = TextCompression.Decompress(compressed);
Debug.Log($"解压后内容: {decompressed.Substring(0, 20)}...");
}
```
### 三、结合 Base64 和压缩
当需要传输二进制压缩数据时,可以结合使用:
```csharp
// 压缩并Base64编码
string CompressAndEncode(string text)
{
byte[] compressed = TextCompression.CompressToBytes(text);
return Convert.ToBase64String(compressed);
}
// 解码并解压
string DecodeAndDecompress(string base64Text)
{
byte[] compressedData = Convert.FromBase64String(base64Text);
return TextCompression.DecompressFromBytes(compressedData);
}
```
### 关键说明:
1. **编码选择**:
- 使用 `Encoding.UTF8` 确保中文兼容
- 对于特殊字符场景,可改用 `Encoding.Unicode`
2. **压缩算法**:
- GZip 提供较好的压缩比(通常 60-80%)
- 对于小文本(<1KB),压缩后可能反而变大
- 替代方案:`BrotliStream`(更高压缩率,但更耗 CPU)
3. **性能优化**:
```csharp
// 预分配缓冲区(处理大文本时)
byte[] buffer = new byte[1024 * 1024]; // 1MB 缓冲区
```
4. **应用场景**:
- 网络传输数据优化
- 本地存储空间节省
- 配置文件加密存储
- 日志文件压缩
> **注意**:压缩后的 Base64 字符串会增大约 33%,但相比原始文本通常仍有显著压缩效果。例如 10KB 文本压缩后可能变为 3KB,再 Base64 编码后约为 4KB[^1]。
阅读全文
相关推荐

















