首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将Unicode字符串转换为转义的ASCII字符串

将Unicode字符串转换为转义的ASCII字符串
EN

Stack Overflow用户
提问于 2009-10-24 03:53:29
回答 6查看 115.6K关注 0票数 81

如何转换此字符串:

This string contains the Unicode character Pi(π)

转换为转义的ASCII字符串:

This string contains the Unicode character Pi(\u03a0)

反之亦然?

C#中当前可用的编码将π字符转换为"?“。我需要保留这种性格。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-10-24 04:59:01

它来回于\uXXXX格式。

class Program {
    static void Main( string[] args ) {
        string unicodeString = "This function contains a unicode character pi (\u03a0)";

        Console.WriteLine( unicodeString );

        string encoded = EncodeNonAsciiCharacters(unicodeString);
        Console.WriteLine( encoded );

        string decoded = DecodeEncodedNonAsciiCharacters( encoded );
        Console.WriteLine( decoded );
    }

    static string EncodeNonAsciiCharacters( string value ) {
        StringBuilder sb = new StringBuilder();
        foreach( char c in value ) {
            if( c > 127 ) {
                // This character is too big for ASCII
                string encodedValue = "\\u" + ((int) c).ToString( "x4" );
                sb.Append( encodedValue );
            }
            else {
                sb.Append( c );
            }
        }
        return sb.ToString();
    }

    static string DecodeEncodedNonAsciiCharacters( string value ) {
        return Regex.Replace(
            value,
            @"\\u(?<Value>[a-zA-Z0-9]{4})",
            m => {
                return ((char) int.Parse( m.Groups["Value"].Value, NumberStyles.HexNumber )).ToString();
            } );
    }
}

输出:

此函数包含unicode字符pi (π)

此函数包含unicode字符pi (\u03a0)

此函数包含unicode字符pi (π)

票数 143
EN

Stack Overflow用户

发布于 2009-10-24 04:54:09

string StringFold(string input, Func<char, string> proc)
{
  return string.Concat(input.Select(proc).ToArray());
}

string FoldProc(char input)
{
  if (input >= 128)
  {
    return string.Format(@"\u{0:x4}", (int)input);
  }
  return input.ToString();
}

string EscapeToAscii(string input)
{
  return StringFold(input, FoldProc);
}
票数 11
EN

Stack Overflow用户

发布于 2014-08-17 22:03:49

作为一行程序:

var result = Regex.Replace(input, @"[^\x00-\x7F]", c => 
    string.Format(@"\u{0:x4}", (int)c.Value[0]));
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1615559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档