【问题标题】:C# String.Format() returns bad charactersC# String.Format() 返回坏字符
【发布时间】:2015-07-24 10:16:39
【问题描述】:

我得到 string.Format 的非常奇怪的行为。我形成这样的消息:

protected override string GetMessageText(ManualEventFact reason)
        {
            var messageText = string.Format("Диспетчер закрыл событие {0}(\"{1}\")",reason.EventTemplate.DisplayName, reason.Text);
            return messageText;
        }

开头的字母是俄语。但是,在调用方法中,我得到了这个字符串:Äèñïåò÷åð çàêðûë ñîáûòèå Тревога("Тревога на объекте с точки зрения диспетчера")。这似乎 string.Format 为硬编码的单词返回了非 unicode 字符。我该如何处理这个问题? 附:我在我的应用程序的其他部分也遇到了这个问题。

【问题讨论】:

    标签: c# .net string unicode string-formatting


    【解决方案1】:

    可能是源文件编码的问题...如果你使用Visual Studio,打开cs文件,然后转到File->Save (your cs) As,然后在Save按钮附近,点击在小箭头上Save With Encoding,对于Encoding,选择Unicode (UTF-8 with signature) - Codepage 65001

    【讨论】:

    • 哦,这成功了!非常感谢,但是有什么方法可以强制 VS 使用 UTF 编码保存所有 cs 文件?我不想浏览所有文件并检查它们是否正确保存...
    • @AlexVoskresenskiy 如果您在 Visual Studio 中创建一个 cs 文件,默认情况下它应该是 UTF-8... 这显然不包括您使用另一个文本编辑器编写然后“包含”在您的项目。如果您有一堆文件并且您不确定它们的编码,我认为没有办法在 Visual Studio 中大量更改它们的编码...
    • @AlexVoskresenskiy 有 this question,但我会非常清楚会发生什么...如果文件未以 UTF8/Unicode 编码,则其编码不是“清晰”或“隐式”,因此转换可能会“丢失”数据。
    • 嗯,无论如何,这是最糟糕的尝试。再次感谢您的帮助!
    • @AlexVoskresenskiy 首先备份您的源文件! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    • 1970-01-01
    • 2017-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-05-03
    • 1970-01-01
    相关资源
    最近更新 更多