【问题标题】:ANSI Encoding implementation for SilverlightSilverlight 的 ANSI 编码实现
【发布时间】:2011-08-18 00:00:02
【问题描述】:

我需要在我的 Silverlight 应用程序中对某些代码页进行编码实现。特别是我需要从 zip-archive 中读取非英语文件名(正在打开 Application.GetResourceStream)。

Silverlight 仅包含 Unicode 编码(Encoding.UTF8、Encoding.Unicode、Encoding.BigEndianUnicode)。 Encoding.GetEncoding 为其他编码名称引发异常。

但我需要一些 ANSI 代码页(特别是 866)的编码类实现。在桌面上我会通过 Encoding.GetEncoding(866) 得到它。

我在哪里可以得到最简单的实现?

附言我知道这个问题与 Silverlight 几乎没有关系,但不提它,我会建议我使用 Encoding.GetEncoding..

【问题讨论】:

  • @Bala R:谢谢!它变得非常容易。我希望你回答为“答案”而不是评论。
  • “ANSI”到底是什么意思?
  • @tchrist 这意味着“ANSI 代码页”或“Windows 代码页”。见en.wikipedia.org/wiki/Windows_code_page

标签: c# silverlight encoding utf-8 codepages


【解决方案1】:

从http://en.wikipedia.org/wiki/Code_page_866,您可以构建地图并将您的内容转换为 UTF-8。

【讨论】:

    【解决方案2】:

    感谢@Bala_R,我得到了 866 代码页并写了:

        private byte[] translateInto866(string fileName)
        {
            const byte startCode1 = 128;        // А, 0410
            const byte startCode2 = 224;        // р, 0440
    
            var result = new byte[fileName.Length];
            int i = 0;
            foreach (char c in fileName)
            {
                if (c >= 'А' && c <= 'п')
                {
                    result[i] = (byte)(((byte)(c - 'А')) + startCode1);
                }
                else if (c > 'п' && c <= 'я')
                {
                    result[i] = (byte)(((byte)(c - 'р')) + startCode2);
                }
                else
                {
                    result[i] = (byte) c;
                }
                i++;
            }
            return result;
        }
    

    现在我们只需要了解使用什么代码页来编码文件名。我们在 manifest 中有它的 unicode 表示,在 zip 中有一些编码的表示。找到合适的编码应该不是很难。但就我而言,我只知道如果不是 utf8,那么它就是 866。

    【讨论】:

      猜你喜欢
      • 2011-03-21
      • 2014-11-30
      • 1970-01-01
      • 2021-11-16
      • 1970-01-01
      • 2012-12-14
      • 2012-05-02
      • 2017-01-29
      • 2022-11-25
      相关资源
      最近更新 更多