C# C语言中Unicode到字符串的转换#

C# C语言中Unicode到字符串的转换#,c#,.net,vb.net,C#,.net,Vb.net,如何将Unicode值转换为其等效字符串 例如,我有“రమెశ్", 我需要一个函数,它接受这个Unicode值并返回一个字符串 我在看System.Text.Encoding.Convert()函数,但它不接受Unicode值;它需要两个编码和一个字节数组 我基本上有一个字节数组,我需要将它保存在字符串字段中,然后稍后再返回并首先将字符串转换回字节数组 因此,我使用ByteConverter.GetString(byteArray)将字节数组保存为字符串,但无法将其恢复为字节数组。请尝试以下操

如何将Unicode值转换为其等效字符串

例如,我有“రమెశ్", 我需要一个函数,它接受这个Unicode值并返回一个字符串

我在看System.Text.Encoding.Convert()函数,但它不接受Unicode值;它需要两个编码和一个字节数组

我基本上有一个字节数组,我需要将它保存在字符串字段中,然后稍后再返回并首先将字符串转换回字节数组

因此,我使用ByteConverter.GetString(byteArray)将字节数组保存为字符串,但无法将其恢复为字节数组。

请尝试以下操作:

byte[] bytes = ...;

string convertedUtf8 = Encoding.UTF8.GetString(bytes);
string convertedUtf16 = Encoding.Unicode.GetString(bytes); // For UTF-16
另一种方法是使用`GetBytes():

编码
类中,如果您需要,会有更多变体。


有不同类型的编码。您可以尝试其中一些,以查看ByTestStream是否正确转换:

System.Text.ASCIIEncoding encodingASCII = new System.Text.ASCIIEncoding();
System.Text.UTF8Encoding encodingUTF8 = new System.Text.UTF8Encoding();
System.Text.UnicodeEncoding encodingUNICODE = new System.Text.UnicodeEncoding();

var ascii = string.Format("{0}: {1}", encodingASCII.ToString(), encodingASCII.GetString(textBytesASCII));
var utf =   string.Format("{0}: {1}", encodingUTF8.ToString(), encodingUTF8.GetString(textBytesUTF8));
var unicode = string.Format("{0}: {1}", encodingUNICODE.ToString(), encodingUNICODE.GetString(textBytesCyrillic));

请看这里:。

要将字符串转换为Unicode字符串,请这样做:非常简单……请注意BytesToString函数,它避免使用任何内置转换内容。速度也很快

private string BytesToString(byte[] Bytes)
{
  MemoryStream MS = new MemoryStream(Bytes);
  StreamReader SR = new StreamReader(MS);
  string S = SR.ReadToEnd();
  SR.Close();
  return S;
}

private string ToUnicode(string S)
{
  return BytesToString(new UnicodeEncoding().GetBytes(S));
}
使用.ToString()


编写了将字符串中的unicode符号转换为UTF8字母的循环:

string stringWithUnicodeSymbols = @"{""id"": 10440119, ""photo"": 10945418, ""first_name"": ""\u0415\u0432\u0433\u0435\u043d\u0438\u0439""}";
var splitted = Regex.Split(stringWithUnicodeSymbols, @"\\u([a-fA-F\d]{4})");
string outString = "";
foreach (var s in splitted)
{
    try
    {
        if (s.Length == 4)
        {
            var decoded = ((char) Convert.ToUInt16(s, 16)).ToString();
            outString += decoded;
        }
        else
        {
            outString += s;
        }
    }
    catch (Exception e)
    {
        outString += s;
    }
}

“Unicode”是什么格式的?我使用的是Unicode编码.GetString(byteArray)从字节数组返回字符串的方法。当我检查字符串时,它有一堆看起来很奇怪的SYBOL!首先,停止你正在做的任何事情并阅读。甚至不要进一步阅读这个答案。现在就去那里!不,不要偷看,文章优先!…好的,完成了吗?然后你应该能够发现你的错误并自己找到正确的答案。如果没有,答案是正确的n问问你自己-我的“字符串”(字节数组)的编码是什么?“Unicode”不是一种编码。在.NET中的
UnicodeEncoding
应该被称为
UTF16Encoding
-微软真丢脸。:PHa!谢谢:)进行编码。默认值有效。我浏览了这篇文章……等我有更多时间的时候我会读完整的。干杯
private string BytesToString(byte[] Bytes)
{
  MemoryStream MS = new MemoryStream(Bytes);
  StreamReader SR = new StreamReader(MS);
  string S = SR.ReadToEnd();
  SR.Close();
  return S;
}

private string ToUnicode(string S)
{
  return BytesToString(new UnicodeEncoding().GetBytes(S));
}
this.Text = ((char)0x00D7).ToString();
var ascii = $"{new ASCIIEncoding().ToString()}: {((ASCIIEncoding)new ASCIIEncoding()).GetString(textBytesASCII)}";
var utf = $"{new UTF8Encoding().ToString()}: {((UTF8Encoding)new UTF8Encoding()).GetString(textBytesUTF8)}";
var unicode = $"{new UnicodeEncoding().ToString()}: {((UnicodeEncoding)new UnicodeEncoding()).GetString(textBytesCyrillic)}";
string stringWithUnicodeSymbols = @"{""id"": 10440119, ""photo"": 10945418, ""first_name"": ""\u0415\u0432\u0433\u0435\u043d\u0438\u0439""}";
var splitted = Regex.Split(stringWithUnicodeSymbols, @"\\u([a-fA-F\d]{4})");
string outString = "";
foreach (var s in splitted)
{
    try
    {
        if (s.Length == 4)
        {
            var decoded = ((char) Convert.ToUInt16(s, 16)).ToString();
            outString += decoded;
        }
        else
        {
            outString += s;
        }
    }
    catch (Exception e)
    {
        outString += s;
    }
}