Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串编码错误(Windows 10和Visual Studio 2015和Net 4.6)_C#_Dictionary_Character Encoding_Visual Studio 2015_.net 4.6 - Fatal编程技术网

C# 字符串编码错误(Windows 10和Visual Studio 2015和Net 4.6)

C# 字符串编码错误(Windows 10和Visual Studio 2015和Net 4.6),c#,dictionary,character-encoding,visual-studio-2015,.net-4.6,C#,Dictionary,Character Encoding,Visual Studio 2015,.net 4.6,我的代码: Keys = new Dictionary<string, string>(); Keys.Add("Набег_0", "raid_0"); Keys=newdictionary(); 键。添加(“абббΓб0”、“raidб0”); 当我得到Keys.ElementAt(0)时,我有这样一个:{[code>0,raid\u 0]}。 当然,当我运行程序时,key=“аааааГ0”未定义,程序会与System.Collections.Generic.KeyNot

我的代码:

Keys = new Dictionary<string, string>();
Keys.Add("Набег_0", "raid_0");
Keys=newdictionary();
键。添加(“абббΓб0”、“raidб0”);
当我得到
Keys.ElementAt(0)
时,我有这样一个:
{[code>0,raid\u 0]}
。 当然,当我运行程序时,
key=“аааааГ0”
未定义,程序会与
System.Collections.Generic.KeyNotFoundException

当我使用Windows8.1+VisualStudio2013+NET3.5时,这段代码运行良好


如何修复此问题?

您以某种方式说服了C#编译器,您的源代码是在代码页1251中编写的,这是东欧和俄罗斯的默认系统代码页。这通常是由于文本文件缺少utf-8 BOM造成的。不清楚这是如何发生的,可能是您使用的文本编辑器而不是内置在Visual Studio中的文本编辑器创建了该文件。也许它被源代码管理弄糟了,那些有Unix背景的人倾向于删除BOM表

在VisualStudio中打开源文件,并确保其仍能正确读取。然后使用文件>另存为,单击保存按钮上的箭头,选择“带编码”,然后选择“Unicode(带签名的UTF-8)”


还要确保默认值仍然良好。文件>高级保存选项>根据需要更改编码。如果您习惯性地使用另一个文本编辑器,那么您将需要对其进行配置,以便它使用BOM表保存文件。

我也有同样的问题,在我的情况下,是ReSharper在应用“将类移动到单独的文件”重构后在windows-1251中保存了我的文件

我用这个测试将我所有的cs文件在repo中转换成UTF-8

    [Test]
    public void UpdateEncoding()
    {
        string path = @"C:\dev\Cash\src";
        foreach (var file in Directory.GetFiles(path, "*.cs", SearchOption.AllDirectories))
        {
            if (HasBom(file))
                continue;

            Console.WriteLine(file);

            var content = File.ReadAllText(file, Encoding.GetEncoding("windows-1251"));
            File.WriteAllText(file, content, Encoding.UTF8);
        }
    }

    private bool HasBom(string file)
    {
        using (var strm = new FileStream(file, FileMode.Open))
        {
            foreach (var b in Encoding.UTF8.GetPreamble())
            {
                if (strm.ReadByte() != b)
                    return false;
            }

            return true;
        }
    }

我在Win8.1/VS2013中的一个本地项目中也遇到了这个问题。因此,这与TFS或任何其他存储库无关。 重新保存到UTF-8会有所帮助。
另外,我有一个俄语本地化的Visual Studio,它通过语言包(讨厌本地化的IDE和MSDN)更新为英语。

这是Visual Studio 2015 Relase版本中的一个已知错误。看见它已经被修复,并将在下一版本的toolset(1.1)中可用。

如果您不想更改源代码编码,可以将编码元素添加到.csproj文件中。这对我有帮助(添加到
元素中):

1250


当然,这只是一个暂时的黑客行为,对于许多项目的解决方案来说都是无用的。

听起来你总是有这个bug。不知何故,键0位于元素0,而不是Ha6er_0。键是用俄语写的。目的是了解英语的意思。在升级到Windows 10+.Net 4.6+Visual Studio 2015之前,代码运行良好。很明显,新的visual studio不再懂俄语。可以归咎于windows或.net。我不想更改他们所有的英文手册,因为这需要对程序进行大量更改。另外,很抱歉自动翻译这是编码。看起来您有Unicode字符。流类默认为ascii编码。看起来您必须在其中一个类中指定Unicode编码。我也有同样的问题。当文件不是UTF-8编码时,Windows10/VisualStudio2015会假定文件的编码错误。在编译应用程序之前,一切看起来都正常。在UTF-8中重新保存文件有帮助,但仍然不清楚我的所有文件都是ANSI格式的。可能是TFS的原因。现在,我必须浏览所有文件,查找是否存在UTF-8编码,以及项目。。。非常感谢你的帮助!它在VisualStudio2015之前工作得非常好,即使文件是1251代码页。这似乎是Visual Studio中的错误,如下一个回答中所述。我不确定,但清除Resharper缓存可能有助于解决此问题。此黑客使我的Visual Studio设计器死于“找不到类型”错误。我强烈建议更新1 RC,以修复此恼人的错误(版本14.0.24627.00)。