将字符串转换为Unicode表示形式

21

可能是重复问题:
将Unicode字符串转换为转义的ASCII字符串

我该如何将ä...转换为类似\u0131...的形式?

是否有函数可以实现这一点?

附言:

除了这种方式:[抱歉@Kendall Frey :-)]

char a = 'ä';
string escape = "\\u" + ((int)a).ToString("X").PadLeft(4, '0');

@JonSkeet,没有现成的函数吗? - Royi Namir
7
可以直接复制粘贴了。 - Jon Skeet
同时,string.isNullOrEmpty代码可以复制粘贴,我的问题是关于像string.isNullOrEmpty这样的现成代码。 - Royi Namir
2
@RoyiNamir 有的。我为你写了它。 - Kendall Frey
1
你的答案是“不”。没有内置函数可以解决这个问题。你需要使用@KendallFrey的解决方案。 - Jon B
2个回答

30

这里有一个将字符转换为转义序列的函数:

string GetEscapeSequence(char c)
{
    return "\\u" + ((int)c).ToString("X4");
}

这句话简单明了,不需要改。

据我所知,没有内置函数。


2
我怀疑在格式化字符串中有一种方法可以正确获取左填充,而不是调用PadLeft... - Jon Skeet
1
@JonSkeet -- 我相信只需更改为 ToString("X4") 并删除 PadLeft 即可解决问题。 - Jon B
2
好的。但是我先想到了它 :P - Jon B
1
主要是为了好玩:var s = "ä"; s = new string(s.SelectMany(c => (int)c > 127 ? ("\\u" + ((int)c).ToString("X4")).ToArray() : new char[] { c }).ToArray()); - Jon B
1
2019版:string EscapeSequence(char c) => $@"\u{(int)c:X4}"; - Robert Synoradzki
显示剩余3条评论

8

据我所知,目前没有内置的函数可以实现此功能。以下是一种相当愚蠢但有效的解决方案。不过Kendall Frey提供了更好的方式。

string GetUnicodeString(string s)
{
    StringBuilder sb = new StringBuilder();
    foreach (char c in s)
    {
        sb.Append("\\u");
        sb.Append(String.Format("{0:x4}", (int)c));
    }
    return sb.ToString();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接