【问题标题】:Convert Unicode character back to its original string representation将 Unicode 字符转换回其原始字符串表示形式
【发布时间】:2019-12-07 23:57:02
【问题描述】:

我定义了一个字符串public const string Numeric0 = "\u0030";。 C# 将其解释为 Unicode 字符,这对我的应用程序的一部分很有用,但我也想以其原始 "\u0030" 格式输出字符串。我在这里尝试了来自 SO 的大多数相关答案,但并没有真正取得任何进展。想法?

预期的 c# 输入:

public const string Numeric0 = "\u0030";
var str = SomeOperation(Numeric0);

预期输出:

str == @"\u0030"

【问题讨论】:

  • 您希望字符串字面上包含"\u0030"?
  • 您能告诉我们您尝试了什么以及结果如何吗?预计$@"\u{(int) ch:x4}" 可以工作(对于char ch)。请注意,如果您需要处理代理对(格式为 \Uxxxxxxxx),这会有点棘手。
  • 是的,字面意思是“\u0030”
  • 所以..."\\u0030"@"\u0030"?或者,如果您希望字符串包含 unicode 字符 0030,但仍想将其打印为 \u0030,请参阅 @JonSkeet 的评论
  • $@"\u{(int)Numeric0[0]:x4}" -- 不需要ToCharArray()。另外,为什么不将您的 const 声明为 char,而不是 string,如果它只包含一个字符?

标签: c# string unicode


【解决方案1】:

所以你想要一种string dump(当每个char 以unicode \uxxxx 符号的形式表示时),让我们在Linq 的帮助下实现它

using System.Linq;

...

public static string Dump(string value) => value == null
  ? "null" //TODO: put desired representation of null string here
  : "\"" + string.Concat(value.Select(c => $"\\u{((int)c):x4}")) + "\"";

...

public const string Numeric0 = "\u0030";

...

string str = Dump(Numeric0);

Console.WriteLine(str);
Console.WriteLine(Dump("abc 123"));

结果:

"\u0030"
"\u0061\u0062\u0063\u0020\u0031\u0032\u0033"

【讨论】:

  • 没有<!-- language: csharp --> 代码不会为我突出显示。
  • @Sinatr:很抱歉,我好像破坏了你的编辑
  • 这可能是我这边的一个错误,现在没有它的代码看起来很好。
  • @DmitryBychenko 有点过头了,但是可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2019-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-15
  • 1970-01-01
相关资源
最近更新 更多