所以,我有一個字符串,它實際上是UTF編碼字符剝離出來的ASCII表示代碼: 「537465616d6c696e6564」 這將在ASCII編碼UTF表示爲\ X53 \ x74 \ x65 [...]C# - 轉換剝離UTF編碼字符串返回到UTF
我試過用正則表達式替換\ x中的正確位置,字節編碼並將其讀回爲UTF,但無濟於事。
在C#中將ASCII字符串變成可讀的UTF的最有效方法是什麼?
所以,我有一個字符串,它實際上是UTF編碼字符剝離出來的ASCII表示代碼: 「537465616d6c696e6564」 這將在ASCII編碼UTF表示爲\ X53 \ x74 \ x65 [...]C# - 轉換剝離UTF編碼字符串返回到UTF
我試過用正則表達式替換\ x中的正確位置,字節編碼並將其讀回爲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);
如果解碼您也可以嘗試(剛剛在CA 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 https://stackoverflow.com/questions/311165/how-do-you-convert-byte-array-to-hexadecimal-string-and-vice-versa
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
轉換的,但也有不少。如果表現很重要,您可能需要選擇更高效的表現。有關更多信息,請參閱下面的鏈接。
在字節串轉換(對性能有一些有趣的討論):
對字符串的.NET
謝謝,我顯然是在修改字節編碼,你的函數工作得更好(TM)。 ;) –