gpt4 book ai didi

visual-studio-2008 - 由于意外的编码更改,Visual Studio 2008 项目文件无法加载

转载 作者:行者123 更新时间:2023-12-04 12:38:25 28 4
gpt4 key购买 nike

在我们的团队中,我们在 Visual Studio 2008 中有一个数据库项目,该项目受 Team Foundation Server 的源代码控制。每两周左右,在一名同事 checkin 后,项目文件将不会加载到其他开发人员的机器上。错误信息是:

The project file could not be loaded. Data at the root level is invalid. Line 1, position 1.



当我在 Notepad++ 中查看项目文件时,该文件如下所示:
��<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL ...

等等(你可以在这看到 <?xml version)
而普通的项目文件看起来像:
<?xml version="1.0" encoding="utf-16"?> ...

所以文件的编码可能有问题。这对我们来说是一个问题,因为事实证明不可能再次获得正确的文件编码。 “解决方案”是丢弃项目文件并从源代码管理中获取最后一个已知的工作版本。

根据文件,编码应该是UTF-16。根据 Notepad++,损坏的文件实际上是 UTF-8。

我的问题是:
  • 为什么 Visual Studio 搞乱了编码
    项目文件,
    显然在随机时间和
    随机机器?
  • 我们应该怎么做才能防止这种情况发生?
  • 当它发生时,是否有
    恢复当前的可能性
    文件以正确的编码代替
    从中提取旧版本
    源头控制?

  • 最后一点:问题出在一个项目文件上,所有其他项目文件都没有暴露这个问题。

    更新:感谢 Jon Skeet 的建议,我有了第三个问题的答案。
    当我用两个字节 FF FE 替换前九个字节 EF BB BF EF BF BD EF BF BD 时,项目文件将再次加载。

    这仍然留下了为什么 Visual Studio 损坏文件的问题。

    最佳答案

    我想我可以对正在发生的事情提供一些见解,如果不是为什么的话。
    FF FEBOM ;它出现在文件的开头表明文件的编码是 UTF-16, little-endian。听起来原始文件确实是 UTF-16,但是有些东西忽略了 BOM 并将其读取为 UTF-8。

    发生这种情况时,每个字节 FFFE被视为无效并转换为 U+FFFD ,官方Unicode垃圾字符。然后,当再次将文本写入文件时,每个垃圾字符都会转换为其 UTF-8 编码 ( EF BF BD ) 并在它们前面添加 UTF-8 BOM ( EF BB BF ),从而导致您报告的九字节序列:

    EF BB BF  # UTF-8 BOM
    EF BF BD # U+FFFD in UTF-8
    EF BF BD # ditto

    如果是这种情况,只需将这九个字节替换为 FF FE不安全。无法保证这些是文件中唯一在解释为 UTF-8 时无效的字节。只要文件只包含 ASCII 字符就可以了,但其他任何东西,如重音字符 ( é ) 或 curl 引号 ( ),都将无法挽回。

    项目文件真的应该是 UTF-16 吗?如果不是,那么当版本控制系统期望使用 UTF-8 时,该开发人员的系统可能正在生成 UTF-16。我注意到在我的 Visual C# Express 安装中, Environment->Documents 下有一个选项。称为“无法在代码页中保存数据时将文档另存为 Unicode”。这听起来可能会导致编码在明显随机的时间发生变化。

    关于visual-studio-2008 - 由于意外的编码更改,Visual Studio 2008 项目文件无法加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2498959/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com