如何将其中包含Unicode文字字符的字符串转换为Unicode字符串

时间:2019-04-30 23:08:13

标签: c# unicode

我正在从API(通过C#代码)以其原义格式接收数据。其中一些数据中包含非ASCII字符。下面是一个示例:

string universityName = "Universidad de M\u00e1laga";

我将把这些数据插入SQL Server数据库,并想插入Unicode编码版本,而不是文字版本。为此,我需要在插入字符串之前对其进行正确编码。看起来应该像这样:

Universidad de Málaga

我环顾了Stack Overflow,但似乎找不到相关的问题,所以我想问一下。有没有内置的C#库,可以让我给它原始的字符串并让它返回所需的字符串?如果没有,我应该遵循一个流程吗?

我已经尝试使用Encoding.Unicode.GetBytes来获取字符串的字节,然后将其转换回字符串,但这似乎对我不起作用。我也可能用错了。

2 个答案:

答案 0 :(得分:3)

如果我对您的理解正确,则有多种方法可以做到这一点。但是这可能对您有用。

免责声明 :它假定您的字符串在数据库Universidad de M\u00e1laga < / p>

var test1 = "Universidad de M\\u00e1laga";  
var test2 = Regex.Unescape(test1);
Console.WriteLine(test1);
Console.WriteLine(test2);

输出

Universidad de M\u00e1laga
Universidad de Málaga

注意 :这可能表示在整个情况下的总体结构或设计问题。不过,谁知道API会给您带来什么回报?

Full Demo here

答案 1 :(得分:0)

您显示的字符串包含一个Unicode character escape sequence,这是在C#字符串中编码字符的一种方式,它主要用于不可打印的字符,但可以用于任何字符。例如,以下所有字符串都相等:

"ab"
"\u0061b"
"a\u0062"
"\u0061\u0062"

您可以这样确认:

Console.WriteLine("ab" == "\u0061b"); // True
Console.WriteLine("ab" == "a\u0062"); // True
Console.WriteLine("ab" == "\u0061\u0062"); // True

在您的情况下:

Console.WriteLine("M\u00e1laga" == "Málaga"); // True

长话短说,您无需执行任何操作。您的琴弦非常好。只需将其存储在数据库中即可!