如何在C#中将Unicode字符还原为原\u转义格式字符串?
解决C#中将Unicode字符转回\uXXXX格式的问题
嗨,这个问题的核心得先掰扯清楚:当你写public const string Numeric0 = "\u0030";时,C#编译器已经把这个转义序列直接解析成了对应的字符'0'——也就是说,Numeric0实际存储的就是单个字符0,而不是\u0030这一串文本。所以你要做的是反向操作:把已经解析后的字符重新编码回Unicode转义字符串格式。
这里给你一个直接可用的SomeOperation实现,专门处理这个需求:
using System.Text; public static string SomeOperation(string input) { StringBuilder sb = new StringBuilder(); foreach (char c in input) { // 将字符转为整数,再格式化为4位十六进制,前面拼接\u sb.Append($"\\u{(int)c:X4}"); } return sb.ToString(); }
怎么验证效果?
用你的测试代码跑一遍:
public const string Numeric0 = "\u0030"; var str = SomeOperation(Numeric0); // 此时 str 的值就是 "\u0030",和 @"\u0030" 完全相等 Console.WriteLine(str == @"\u0030"); // 输出 True
补充说明
- 这个方法是通用的,不管输入的是单个字符还是多字符字符串,每个字符都会被转换成对应的
\uXXXX格式。比如输入"AB",会返回"\u0041\u0042"。 - 如果你只需要处理ASCII范围内的字符,这个逻辑完全适用;如果要处理超出BMP的Unicode字符(比如emoji),可能需要额外处理代理对,但你的场景里应该用不上。
之前你试的Stack Overflow方案没生效,大概率是因为那些方案大多是处理已经包含\u文本的字符串(比如把@"\u0030"解析成'0'),而你的需求是反向的,方向不对自然没用~
内容的提问来源于stack exchange,提问作者Drise
相关产品推荐
相关产品推荐

