C# - 将剥离的 UTF 编码字符串转换回 UTF
C# - converting a stripped UTF encoded string back to UTF
所以,我有一个字符串,它实际上是 UTF 编码的字符,去掉了 ASCII 表示代码:
“537465616d6c696e6564”
这将以 ASCII 编码的 UTF 表示为 \x53\x74\x65 [...]
我尝试在 \x 中的正确位置进行 Regexp 替换,对其进行字节编码并将其读回为 UTF,但无济于事。
在 C# 中将 ASCII 字符串转换为可读的 UTF 的最有效方法是什么?
据我所知,您有一个字符串“537465616d6c696e6564”,它实际上表示 char[] chars = { '\x53', '\x74', ... }
。
首先将这个字符串转换为字节数组How can I convert a hex string to a byte array?
为了您的方便:
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
然后有很多UTF编码(UTF-8,UTF-16),C#内部使用UTF-16(实际上是它的子集),所以我假设你想要UTF-16字符串:
string str = System.Text.Encoding.Unicode.GetString(array);
如果您在解码后得到不正确的字符,您也可以尝试 UTF-8 编码(以防万一您不知道确切的编码,Encoding.UTF8
)。
我不太了解字符串编码,但假设您的原始字符串是一系列字节的十六进制表示,您可以这样做:
class Program
{
private const string encoded = "537465616d6c696e6564";
static void Main(string[] args)
{
byte[] bytes = StringToByteArray(encoded);
string text = Encoding.ASCII.GetString(bytes);
Console.WriteLine(text);
Console.ReadKey();
}
// From
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
}
如果您稍后想将结果编码为 UTF8,则可以使用:
Encoding.UTF8.GetBytes(text);
我已经采用了一种 StringToByteArray
转换的实现方式,但还有很多。如果性能很重要,您可能希望选择一个更高效的。有关详细信息,请参阅下面的链接。
关于字节到字符串的转换(关于性能的一些有趣的讨论):
- How do you convert Byte Array to Hexadecimal String, and vice versa?
- How can I convert a hex string to a byte array?
关于 .NET 中的字符串
- Determine a string's encoding in C#
- http://csharpindepth.com/Articles/General/Strings.aspx
所以,我有一个字符串,它实际上是 UTF 编码的字符,去掉了 ASCII 表示代码: “537465616d6c696e6564” 这将以 ASCII 编码的 UTF 表示为 \x53\x74\x65 [...]
我尝试在 \x 中的正确位置进行 Regexp 替换,对其进行字节编码并将其读回为 UTF,但无济于事。
在 C# 中将 ASCII 字符串转换为可读的 UTF 的最有效方法是什么?
据我所知,您有一个字符串“537465616d6c696e6564”,它实际上表示 char[] chars = { '\x53', '\x74', ... }
。
首先将这个字符串转换为字节数组How can I convert a hex string to a byte array?
为了您的方便:
public static byte[] StringToByteArray(string hex) {
return Enumerable.Range(0, hex.Length)
.Where(x => x % 2 == 0)
.Select(x => Convert.ToByte(hex.Substring(x, 2), 16))
.ToArray();
}
然后有很多UTF编码(UTF-8,UTF-16),C#内部使用UTF-16(实际上是它的子集),所以我假设你想要UTF-16字符串:
string str = System.Text.Encoding.Unicode.GetString(array);
如果您在解码后得到不正确的字符,您也可以尝试 UTF-8 编码(以防万一您不知道确切的编码,Encoding.UTF8
)。
我不太了解字符串编码,但假设您的原始字符串是一系列字节的十六进制表示,您可以这样做:
class Program
{
private const string encoded = "537465616d6c696e6564";
static void Main(string[] args)
{
byte[] bytes = StringToByteArray(encoded);
string text = Encoding.ASCII.GetString(bytes);
Console.WriteLine(text);
Console.ReadKey();
}
// From
public static byte[] StringToByteArray(String hex)
{
int NumberChars = hex.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);
return bytes;
}
}
如果您稍后想将结果编码为 UTF8,则可以使用:
Encoding.UTF8.GetBytes(text);
我已经采用了一种 StringToByteArray
转换的实现方式,但还有很多。如果性能很重要,您可能希望选择一个更高效的。有关详细信息,请参阅下面的链接。
关于字节到字符串的转换(关于性能的一些有趣的讨论):
- How do you convert Byte Array to Hexadecimal String, and vice versa?
- How can I convert a hex string to a byte array?
关于 .NET 中的字符串
- Determine a string's encoding in C#
- http://csharpindepth.com/Articles/General/Strings.aspx