有没有办法在Windows phone7中使用ASCIIEncoding?
除非我做错了什么,否则Encoding.ASCII是不存在的,我需要它来进行C# -> PHP加密(因为PHP在SHA1加密中只使用ASCII )。
有什么建议吗?
发布于 2010-10-26 18:43:57
你自己实现起来很容易,Unicode永远不会弄乱ASCII代码:
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;
}发布于 2010-10-26 18:17:51
在你的问题中没有看到任何细节,这可能会偏离正轨。你说得对,Silverlight不支持ASCII编码。
然而,我怀疑实际上UTF8会做你需要的事情。值得注意的是,单字节ASCII字符序列和以UTF-8编码的同一组字符是相同的。也就是说,完整的ASCII字符集被UTF-8中的前128个单字节码点逐字重复。
发布于 2012-08-16 09:57:39
我有一个编写CSV文件的Silverlight应用程序,这些文件必须以ASCII编码(当您在Excel中打开文件时,使用UTF-8会导致重音字符显示错误)。
由于Silverlight没有Encoding.ASCII类,所以我实现了一个类,如下所示。它对我很有效,希望对你也有用:
/// <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;
}
}https://stackoverflow.com/questions/4022281
复制相似问题