【问题标题】:What if there's no ANSI code page in C#?如果 C# 中没有 ANSI 代码页怎么办?
【发布时间】:2015-10-08 11:28:16
【问题描述】:

我正在使用 Unity3d 开发应用程序。

如您所知,我们可以用 C# 编写代码,因为 Unity3d 提供了使用 Mono 的环境。我不知道这是由于 Mono 或 Unity3d 本身造成的,但是为某些语言(例如中文、日文和韩文)设置 ANSI 编码存在问题。当我在 Android 上运行我的应用程序时,我需要的所有代码页面都会出现这样的错误消息。

NotSupportedException:不支持 CodePage 50227

如果你阅读了here 的解释,它会说

"最后一列中的星号表示代码页受 .NET Framework 原生支持,与底层平台无关。"

代码页 50227 用星号表示!

我说我在使用 Android 时遇到问题,但在 Windows 上也会出现异常。事实上,比在 Android 上要好得多,因为在 Windows 上我可以使用一些 ANSI 编码,这些编码虽然不起作用,但与使用 Visual Studio 编写代码时相比仍然非常有限。

如果 mono 或 Unity3d 不完全支持 ANSI 编码,我能做些什么吗?

我真的需要阅读一些用 ANSI 编码编写的文本文件,并将它们保存为 UTF 编码。当然,我可以为这项工作创建一个 jar 插件,但由于性能原因我不想这样做。 (我已经在 Unity3d 中使用了太多的 jar 文件)如果可能的话,我想用 C# 或 C++ 编写。

【问题讨论】:

    标签: c# android encoding mono ansi


    【解决方案1】:

    代码页 50227 用星号表示

    抱歉,这无关紧要。 Mono(无论是在 Windows 还是 Android 上运行)都不是“.NET 框架”。这是对兼容实现的尝试,但 Microsoft 的 .NET 文档并非旨在成为 API 的非 Microsoft 实现的可靠参考。

    如果 mono 或 Unity3d 不完全支持 ANSI 编码,我能做些什么吗?

    底层操作系统应该完全支持这些编码。不幸的是,如果 Mono 本身不支持它们(这应该让我感到惊讶,但我想这不是真的),那么您将不得不使用 API 的特定于平台的部分(例如 Windows 上的 p/invoke)。

    我怀疑再为 Android 添加一个 jar 插件会导致显着的性能变化。

    就个人而言,我会走那条路。但是,或者,如果您事先知道您需要哪些特定的编码,并且数量不多,我想您可以在 C# 中编写自己的 Encoding 类作为项目的一部分来支持每个类。不是我喜欢的东西,尤其是对于像 CP 50227 这样的多字节编码,但是您应该能够编写一个常规的 C# 程序来构建您需要的数据表,基于编码的 .NET 实现。因此,所涉及的实际体力劳动可以相当少。

    【讨论】:

    • 非常感谢 :) 是的,正如你所说,我认为再多一个 jar 文件不会影响性能。我的意思是,考虑再添加一个 jar 文件最终让我想到了应该考虑性能的情况。一开始我没想到我会有很多这样的jar库,所以我决定尽可能不添加更多的jar。
    猜你喜欢
    • 2019-06-02
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多