我正在用C#编码驱动螺母,试图将西里尔字符存储在字符串中,到目前为止,我还没有找到解决方案。

例如,如果我执行以下代码:

string test = "АЗУОЫЯЕЁЮИ";


测试变量将为每个字符(而不是字符本身)包含两个问号。

似乎它使用ASCII编码,但是我认为在C#中默认情况下所有字符串都是UTF8,但是如果使用ASCII代替,我找不到改变它的方法,所以我不知道该怎么做。

我正在使用OSX Yosemite下Unity游戏引擎中捆绑提供的Mono Develop。我确实将此类文件保存为UTF8,并已通过iconv对其进行了仔细检查,以防Mono Develop不能正确执行。毫无疑问,它们都是UTF8。

我看过有关编码的C#文档,但是恐怕我不太了解它,因为我找不到任何可以帮助解决该问题的东西。

编辑:我正在添加此代码,因为它表明问题不仅是您所看到的问题,而且还涉及内部编码本身。 (顺便说一句,“А”字符不是ASCII“ A”,而是俄语西里尔字母“А”):

            // Debug code
            string one = "А";
            string two = "А";
            string three = "З";
            string logMessageOne = (one == two) ? "One is equal to Two" : "One is different than Two";
            string logMessageTwo = (one == three) ? "One is equal to Three" : "One is different than Three";
            string logMessageThree = (one.CompareTo (three) == 0) ? "One is equal to Three" : "One is different than Three";


在所有情况下,它都表示所有字符串均相等。

最佳答案

每个带有Unicode字符的文件都需要使用Bom编码为utf8,才能统一工作。默认情况下,monodevelop至少在osx上不这样做(纯utf8)。

在Windows上,使用notepad ++或类似文件编辑此文件,然后使用Bom将编码更改为utf8。如果您使用的是osx,我可以为您发送一个工具。

如果添加bom,则通常会保留在那里,无需每次保存都重复此操作。

10-08 08:32
查看更多