如果 C# 中没有 ANSI 代码页怎么办?

What if there's no ANSI code page in C#?

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

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

NotSupportedException: CodePage 50227 not supported

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

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

代码页 50227 由星号表示!

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

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

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

The CodePage 50227 is indicated by an asterisk

抱歉,但这无关紧要。单声道(无论 Windows 或 Android 上的 运行)不是 "the .NET Framework"。这是对兼容实现的尝试,但 Microsoft 的 .NET 文档并不是要成为 API.

的非 Microsoft 实现的可靠参考。

If mono or Unity3d doesn't support ANSI encodings fully, is there anything I can do?

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

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

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