为什么我的 C# 转义字符在从 base 64 解码时不起作用?
Why does my C# escape character not work when being decoded from base 64?
我制作了一个简单的打印应用程序,我在其中使用 \n
、\t
文本格式,例如制表符或换行符。
当我这样使用硬编码输入时,它是运行完美的。
isi = "ARIEF - JL. ANGGA JAYA II\n\t\t\t\tSTRUK PEMBAYARAN NEXXT MEDIA\n\nIDPEL\t\t\t: 09343590348509435\nTGL. BAYAR\t\t: 2017-09-02 10:26:53 \t\t\tTAGIHAN\t: 1.000.000\nPRODUK\t\t:\t\t\t\t\tADMIN\t\t: 2.500\nNAMA\t\t\t: RYAN\t\t\t\t\tTOTAL\t\t: 1.500.000\nREF\t\t\t: ARIEF - JL. ANGGA JAYA II\n\n\t\t\tCATUR TUNGGAL KAB SLEMAN DAISTA YOGYAKARTA\n\n\t\t\tSTRUK INI MERUPAKAN BUKTI PEMBAYARAN YANG SAH\n\t\t\t HUBUNGI CUSTOMER SUPPORT LOKET PPOB ANDA\n";
和运行是这样的:
但是当我使用以下代码从 base64 解码中获取字符串时:
public string base64ToString(string str)
{
byte[] data = Convert.FromBase64String(str);
return Encoding.UTF8.GetString(data).ToString();
}
它不再转义格式并得到这个布局:
我的代码有问题吗?还是我缺少一些基本的 C# 知识?
这里是 UTF-8 base64 编码的字符串:
QVJJRUYgLSBKTC4gQU5HR0EgSkFZQSBJSVxuXHRcdFx0XHRTVFJVSyBQRU1CQVlBUkFOIE5FWFhUIE1FRElBXG5cbklEUEVMXHRcdFx0OiAwOTM0MzU5MDM0ODUwOTQzNVxuVEdMLiBCQVlBUlx0XHQ6IDIwMTctMDktMDIgMTA6MjY6NTMgXHRcdFx0VEFHSUhBTlx0OiAxLjAwMC4wMDBcblBST0RVS1x0XHQ6XHRcdFx0XHRcdEFETUlOXHRcdDogMi41MDBcbk5BTUFcdFx0XHQ6IFJZQU5cdFx0XHRcdFx0VE9UQUxcdFx0OiAxLjUwMC4wMDBcblJFRlx0XHRcdDogQVJJRUYgLSBKTC4gQU5HR0EgSkFZQSBJSVxuXG5cdFx0XHRDQVRVUiBUVU5HR0FMIEtBQiBTTEVNQU4gREFJU1RBIFlPR1lBS0FSVEFcblxuXHRcdFx0U1RSVUsgSU5JIE1FUlVQQUtBTiBCVUtUSSBQRU1CQVlBUkFOIFlBTkcgU0FIXG5cdFx0XHRIVUJVTkdJIENVU1RPTUVSIFNVUFBPUlQgTE9LRVQgUFBPQiBBTkRBXG4=
我用这个得到了那个字符串:
您使用的工具不适合这项工作。它采用您粘贴在那里的文字文本(反斜杠和所有)并将其转换为 base64 字符串。从程序员的角度来看,它把\n
变成了"\n"
。要使该工具起作用,您不能输入 \n
并期望看到换行符,您需要实际输入换行符。 \t
也是如此,您需要输入实际的制表符(假设该工具不对数据进行任何额外处理)。
用代码对其进行编码会更容易。
string EncodeString(string str, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
return Convert.ToBase64String(encoding.GetBytes(str));
}
string DecodeString(string str, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
return encoding.GetString(Convert.FromBase64String(str));
}
我制作了一个简单的打印应用程序,我在其中使用 \n
、\t
文本格式,例如制表符或换行符。
当我这样使用硬编码输入时,它是运行完美的。
isi = "ARIEF - JL. ANGGA JAYA II\n\t\t\t\tSTRUK PEMBAYARAN NEXXT MEDIA\n\nIDPEL\t\t\t: 09343590348509435\nTGL. BAYAR\t\t: 2017-09-02 10:26:53 \t\t\tTAGIHAN\t: 1.000.000\nPRODUK\t\t:\t\t\t\t\tADMIN\t\t: 2.500\nNAMA\t\t\t: RYAN\t\t\t\t\tTOTAL\t\t: 1.500.000\nREF\t\t\t: ARIEF - JL. ANGGA JAYA II\n\n\t\t\tCATUR TUNGGAL KAB SLEMAN DAISTA YOGYAKARTA\n\n\t\t\tSTRUK INI MERUPAKAN BUKTI PEMBAYARAN YANG SAH\n\t\t\t HUBUNGI CUSTOMER SUPPORT LOKET PPOB ANDA\n";
和运行是这样的:
但是当我使用以下代码从 base64 解码中获取字符串时:
public string base64ToString(string str)
{
byte[] data = Convert.FromBase64String(str);
return Encoding.UTF8.GetString(data).ToString();
}
它不再转义格式并得到这个布局:
我的代码有问题吗?还是我缺少一些基本的 C# 知识?
这里是 UTF-8 base64 编码的字符串:
QVJJRUYgLSBKTC4gQU5HR0EgSkFZQSBJSVxuXHRcdFx0XHRTVFJVSyBQRU1CQVlBUkFOIE5FWFhUIE1FRElBXG5cbklEUEVMXHRcdFx0OiAwOTM0MzU5MDM0ODUwOTQzNVxuVEdMLiBCQVlBUlx0XHQ6IDIwMTctMDktMDIgMTA6MjY6NTMgXHRcdFx0VEFHSUhBTlx0OiAxLjAwMC4wMDBcblBST0RVS1x0XHQ6XHRcdFx0XHRcdEFETUlOXHRcdDogMi41MDBcbk5BTUFcdFx0XHQ6IFJZQU5cdFx0XHRcdFx0VE9UQUxcdFx0OiAxLjUwMC4wMDBcblJFRlx0XHRcdDogQVJJRUYgLSBKTC4gQU5HR0EgSkFZQSBJSVxuXG5cdFx0XHRDQVRVUiBUVU5HR0FMIEtBQiBTTEVNQU4gREFJU1RBIFlPR1lBS0FSVEFcblxuXHRcdFx0U1RSVUsgSU5JIE1FUlVQQUtBTiBCVUtUSSBQRU1CQVlBUkFOIFlBTkcgU0FIXG5cdFx0XHRIVUJVTkdJIENVU1RPTUVSIFNVUFBPUlQgTE9LRVQgUFBPQiBBTkRBXG4=
我用这个得到了那个字符串:
您使用的工具不适合这项工作。它采用您粘贴在那里的文字文本(反斜杠和所有)并将其转换为 base64 字符串。从程序员的角度来看,它把\n
变成了"\n"
。要使该工具起作用,您不能输入 \n
并期望看到换行符,您需要实际输入换行符。 \t
也是如此,您需要输入实际的制表符(假设该工具不对数据进行任何额外处理)。
用代码对其进行编码会更容易。
string EncodeString(string str, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
return Convert.ToBase64String(encoding.GetBytes(str));
}
string DecodeString(string str, Encoding encoding = null)
{
encoding = encoding ?? Encoding.UTF8;
return encoding.GetString(Convert.FromBase64String(str));
}