ASCIIEncoding In Windows Phone 7

2019-01-09 05:52发布

Is there a way to use ASCIIEncoding in Windows Phone 7?

Unless I'm doing something wrong Encoding.ASCII doesn't exist and I'm needing it for C# -> PHP encryption (as PHP only uses ASCII in SHA1 encryption).

Any suggestions?

6条回答
成全新的幸福
2楼-- · 2019-01-09 06:16

I started from @Hans Passant 's answer and I rewrote it with Linq :

/// <summary>
/// Gets an encoding for the ASCII (7-bit) character set.
/// </summary>
/// <see cref="http://stackoverflow.com/a/4022893/1248177"/>
/// <param name="s">A character set.</param>
/// <returns>An encoding for the ASCII (7-bit) character set.</returns>
public static byte[] StringToAscii(string s)
{
    return (from char c in s select (byte)((c <= 0x7f) ? c : '?')).ToArray();
}

You may want to remove the call to ToArray() and return a IEnumerable<byte> instead of byte[].

查看更多
成全新的幸福
3楼-- · 2019-01-09 06:30

Not really seeing any detail in your question this could be off track. You are right Silverlight has no support for the ASCII encoding.

However I suspect that in fact UTF8 will do what you need. Its worth bearing in mind that a sequence of single byte ASCII only characters and the same set of characters encoded as UTF-8 are identical. That is the the complete ASCII character set is repeated verbatim by the first 128 single byte code points in UTF-8.

查看更多
不美不萌又怎样
4楼-- · 2019-01-09 06:35

According to this MS forum thread, Windows Phone 7 does not support Encoding.ASCII.

查看更多
可以哭但决不认输i
5楼-- · 2019-01-09 06:37

I had similar problem using Xamarin (Mono) for Android where I'm using Portable Class Library and they don't support Econding.ASCII.

Instead, the only working solution (except doing it manually) is this one

Uri.EscapeDataString(yourString);

See this answer which provide additional information.

查看更多
\"骚年 ilove
6楼-- · 2019-01-09 06:39

It is easy to implement yourself, Unicode never messed with the ASCII codes:

    public static byte[] StringToAscii(string s) {
        byte[] retval = new byte[s.Length];
        for (int ix = 0; ix < s.Length; ++ix) {
            char ch = s[ix];
            if (ch <= 0x7f) retval[ix] = (byte)ch;
            else retval[ix] = (byte)'?';
        }
        return retval;
    }
查看更多
做个烂人
7楼-- · 2019-01-09 06:41

I have a Silverlight app that writes CSV files, which have to be encoded in ASCII (using UTF-8 causes accented characters to show up wrong when you open the files in Excel).

Since Silverlight doesn't have an Encoding.ASCII class, I implemented one as follows. It works for me, hope it's useful to you as well:

/// <summary>
/// Silverlight doesn't have an ASCII encoder, so here is one:
/// </summary>
public class AsciiEncoding : System.Text.Encoding
{
    public override int GetMaxByteCount(int charCount)
    {
        return charCount;
    }
    public override int GetMaxCharCount(int byteCount)
    {
        return byteCount;
    }
    public override int GetByteCount(char[] chars, int index, int count)
    {
        return count;
    }
    public override byte[] GetBytes(char[] chars)
    {
        return base.GetBytes(chars);
    }
    public override int GetCharCount(byte[] bytes)
    {
        return bytes.Length;
    }
    public override int GetBytes(char[] chars, int charIndex, int charCount, byte[] bytes, int byteIndex)
    {
        for (int i = 0; i < charCount; i++)
        {
            bytes[byteIndex + i] = (byte)chars[charIndex + i];
        }
        return charCount;
    }
    public override int GetCharCount(byte[] bytes, int index, int count)
    {
        return count;
    }
    public override int GetChars(byte[] bytes, int byteIndex, int byteCount, char[] chars, int charIndex)
    {
        for (int i = 0; i < byteCount; i++)
        {
            chars[charIndex + i] = (char)bytes[byteIndex + i];
        }
        return byteCount;
    }
}
查看更多
登录 后发表回答