编码和解码奇怪的 .shm 文件数据到 base64 c#
encode and decode strange .shm file data to and from base64 c#
首先是一个令人沮丧的事实:https://www.base64decode.org/可以做我想做的事。
我正在尝试对图像处理工具 MVTec Halcon 生成的模型文件 (.shm) 进行编码和解码(与 base64 进行解码),因为我想将其存储在 xml 文件中。
如果我打开它,它有这种奇怪的形式:
HSTF ÿÿÿÿ¿€ Q¿ÙG®záH?Üä4©±w?Eè}‰@?ð ................
我正在使用这种方法对其进行编码和解码:
public static string Base64Encode(string text)
{
Byte[] textBytes = Encoding.Default.GetBytes(text);
return Convert.ToBase64String(textBytes);
}
public static string Base64Decode(string base64EncodedData)
{
Byte[] base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.Default.GetString(base64EncodedBytes);
}
并像这样从图形用户界面调用方法:
var model = File.ReadAllText(@"C:\Users\Desktop\model_region_nut.txt");
var base64 = ImageConverter.Base64Encode(model);
File.WriteAllText(@"C:\Users\Desktop\base64.txt", base64);
var modelneu = ImageConverter.Base64Decode(File.ReadAllText(@"C:\Users\Desktop\base64.txt"));
File.WriteAllText(@"C:\Users\Desktop\modelneu.txt", modelneu);
我的 modelneu 结果是:
HSTF ?????? Q??G?z?H???4??w??E?}??@??
所以你可以看到有很多缺失的字符。我猜问题是使用.Default引起的。
感谢您的帮助,
米歇尔
问题是读取未指定 encoding
的文件,请检查 this question。
正如那里提到的,您可以为 ReadAllText to specify encoding and also for writing you must specofy encoding for WriteAllText 使用重载我建议使用 UTF-8 编码,因此:
var model = File.ReadAllText(@"C:\Users\pichlerm\Desktop\model_region_nut.txt",Encoding.UTF8);
var base64 = ImageConverter.Base64Encode(model);
File.WriteAllText(@"C:\Users\Desktop\base64.txt", base64,Encoding.UTF8);
var modelneu = ImageConverter.Base64Decode(File.ReadAllText(@"C:\Users\Desktop\base64.txt"));
File.WriteAllText(@"C:\Users\pichlerm\Desktop\modelneu.txt", modelneu);
如果您使用的是二进制数据,则完全没有理由进行文本解码和编码。这样做只会冒以各种方式破坏数据的风险,即使您使用的是一致的字符编码也是如此。
只需使用 File.ReadAllBytes()
而不是 File.ReadAllText()
并跳过不必要的 Encoding
步骤。
首先是一个令人沮丧的事实:https://www.base64decode.org/可以做我想做的事。
我正在尝试对图像处理工具 MVTec Halcon 生成的模型文件 (.shm) 进行编码和解码(与 base64 进行解码),因为我想将其存储在 xml 文件中。
如果我打开它,它有这种奇怪的形式:
HSTF ÿÿÿÿ¿€ Q¿ÙG®záH?Üä4©±w?Eè}‰@?ð ................
我正在使用这种方法对其进行编码和解码:
public static string Base64Encode(string text)
{
Byte[] textBytes = Encoding.Default.GetBytes(text);
return Convert.ToBase64String(textBytes);
}
public static string Base64Decode(string base64EncodedData)
{
Byte[] base64EncodedBytes = Convert.FromBase64String(base64EncodedData);
return Encoding.Default.GetString(base64EncodedBytes);
}
并像这样从图形用户界面调用方法:
var model = File.ReadAllText(@"C:\Users\Desktop\model_region_nut.txt");
var base64 = ImageConverter.Base64Encode(model);
File.WriteAllText(@"C:\Users\Desktop\base64.txt", base64);
var modelneu = ImageConverter.Base64Decode(File.ReadAllText(@"C:\Users\Desktop\base64.txt"));
File.WriteAllText(@"C:\Users\Desktop\modelneu.txt", modelneu);
我的 modelneu 结果是:
HSTF ?????? Q??G?z?H???4??w??E?}??@??
所以你可以看到有很多缺失的字符。我猜问题是使用.Default引起的。
感谢您的帮助, 米歇尔
问题是读取未指定 encoding
的文件,请检查 this question。
正如那里提到的,您可以为 ReadAllText to specify encoding and also for writing you must specofy encoding for WriteAllText 使用重载我建议使用 UTF-8 编码,因此:
var model = File.ReadAllText(@"C:\Users\pichlerm\Desktop\model_region_nut.txt",Encoding.UTF8);
var base64 = ImageConverter.Base64Encode(model);
File.WriteAllText(@"C:\Users\Desktop\base64.txt", base64,Encoding.UTF8);
var modelneu = ImageConverter.Base64Decode(File.ReadAllText(@"C:\Users\Desktop\base64.txt"));
File.WriteAllText(@"C:\Users\pichlerm\Desktop\modelneu.txt", modelneu);
如果您使用的是二进制数据,则完全没有理由进行文本解码和编码。这样做只会冒以各种方式破坏数据的风险,即使您使用的是一致的字符编码也是如此。
只需使用 File.ReadAllBytes()
而不是 File.ReadAllText()
并跳过不必要的 Encoding
步骤。