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

时间:2015-10-08 01:39:59

标签: c# android encoding mono ansi

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

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

  

NotSupportedException:不支持CodePage 50227

如果您阅读解释here,则说明

" 最后一列中的星号表示.NET Framework本身支持代码页,无论底层平台如何。"

CodePage 50227用星号表示!

我说我在使用Android时遇到了麻烦,但在Windows上也出现了例外情况。事实上,比在Android上要好得多,因为在Windows上我可以使用一些ANSI编码,这些编码与使用Visual Studio编写代码时相比仍然非常有限。

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

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

1 个答案:

答案 0 :(得分:1)

  

CodePage 50227用星号

表示

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

  

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

底层操作系统应完全支持这些编码。不幸的是,如果Mono本身不支持它们(这对我来说应该是令人惊讶的,但我想这不是真的),那么你将不得不使用API​​的平台特定部分(例如,在Windows上进行p / invoke)。

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

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