【问题标题】:Encoding.ASCII.GetString() in Windows Phone PlatformWindows Phone 平台中的 Encoding.ASCII.GetString()
【发布时间】:2011-10-13 07:35:31
【问题描述】:
byte[] tagData = GetTagBytes(tagID, out tiffDataType, out numberOfComponents);
string str = Encoding.ASCII.GetString(tagData);

windows phone 平台下,框架不支持Encoding.ASCII.GetString() 方法。

我曾经从 Passant 的帖子 ASCIIEncoding In Windows Phone 7 之前获得帮助。但它只会将string 转换为byte[],现在我需要将byte[] 转换为string。

任何帮助都会很好~

【问题讨论】:

  • 你确定你真的需要 ASCII 吗? 90% 询问 ASCII 的用户真的想要 UTF-8
  • this answer 不起作用吗?您应该/可能(?)有一个GetString(Byte[], Int32, Int32) 方法,您可以在其中使用GetString(tagData, 0, tagData.Length),对吗?

标签: c# windows-phone-7 encoding


【解决方案1】:

如果您尝试了解Hans' code 的工作原理,您将很容易想出反向转换:

public static string AsciiToString(byte[] bytes) { 
        StringBuilder sb = new StringBuilder(bytes.Length); 
        foreach(byte b in bytes) {
            sb.Append(b<=0x7f ? (char)b : '?'); 
        } 
        return sb.ToString(); 
    } 

您也可以使用 LINQ,但只有 .NET 4.0 才有不错的解决方案:

string AsciiToString(byte[] bytes)
{
  return string.Concat( bytes.Select(b => b <= 0x7f ? (char)b : '?') );
}

不幸的是,在以前版本的框架中缺少 String.Concat<T>(IEnumerable<T>) 重载,这迫使您使用有点丑陋和低效的:

string AsciiToString(byte[] bytes)
{
  return string.Concat( 
    ( bytes.Select(b => (b <= 0x7f ? (char)b : '?').ToString()) )
    .ToArray()
    );
}

【讨论】:

  • 是的,这就是我想要的。因为我只是 c# 的初学者,所以很多事情让我感到困惑。感谢您的帮助。
【解决方案2】:

如果你真的有 ASCII(所以

StringBuilder sb = new StringBuilder(tagData.Length);
foreach (var b in tagData)
{
    sb.Append((char)b);
}

var str = sb.ToString();

我会补充一点,您可能需要的是Encoding.UTF8.GetString(tagData) :-)

【讨论】:

    【解决方案3】:

    Convert.ToBase64String 方法(byte[]) 返回字符串

    http://msdn.microsoft.com/en-us/library/dhx0d524(VS.95).aspx

    我希望这会有所帮助!

    【讨论】:

      【解决方案4】:

      基于 Serge - appTranslator,我创建了一个完全模仿 Silverlight 的 Encoding.ASCII.GetString 的重载实现

          public static string EncodingASCIIGetString(byte[] bytes, int index, int count)
          {
              StringBuilder sb = new StringBuilder(count);
      
              for(int i = index; i<(index+count); i++)
              {
                  sb.Append(bytes[i] <= 0x7f ? (char)bytes[i] : '?');             
              }
      
              return sb.ToString();
          }
      

      虽然没试过。随意编辑

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 2016-07-09
        • 2023-04-04
        • 2016-07-28
        相关资源
        最近更新 更多