Xen*_*nan 7 encoding visual-studio-2008 project-files
在我们的团队中,我们在Visual Studio 2008中有一个数据库项目,该项目由Team Foundation Server进行源代码管理.每两周左右,在一位同事签入后,项目文件将不会加载到其他开发人员的计算机上.错误消息是:
无法加载项目文件.根级别的数据无效.第1行,第1位.
当我在Notepad ++中查看项目文件时,该文件如下所示:
??<NUL?NULxNULmNULlNUL NULvNULeNULrNULsNULiNULoNULnNUL ...
等等(你可以<?xml version在这里看到)而普通的项目文件看起来像:
<?xml version="1.0" encoding="utf-16"?> ...
所以可能是文件编码有问题.这对我们来说是个问题,因为事实证明不可能再次使文件编码正确.'解决方案'是扔掉项目文件,从源代码控制中获取最后一个知道的工作版本.
根据该文件,编码应为UTF-16.根据Notepad ++,损坏的文件实际上是UTF-8.
我的问题是:
最后一点:问题在于单个项目文件,所有其他项目文件都不会暴露这个问题.
更新:感谢Jon Skeet的建议,我得到第三个问题的答案.当我用两个字节FF FE替换前九个字节EF BB BF EF BF BD EF BF BD时,项目文件将再次加载.
这仍然是Visual Studio破坏文件的原因.
我想我可以提供一些关于正在发生的事情的见解,如果不是原因的话。
\n\nFF FE是一个物料清单;它出现在文件的开头表明该文件的编码是 UTF-16,little-endian。听起来原始文件确实是 UTF-16,但有些东西忽略了 BOM,并将其读取为 UTF-8。
当这种情况发生时,每个字节FF和 都FE被视为无效并转换为U+FFFD官方 Unicode 垃圾字符。然后,当文本再次写入文件时,每个垃圾字符都会转换为其 UTF-8 编码 ( EF BF BD),并在它们前面添加UTF-8 BOM ( EF BB BF),从而产生您想要的九字节序列。报道:
EF BB BF # UTF-8 BOM\nEF BF BD # U+FFFD in UTF-8\nEF BF BD # ditto\nRun Code Online (Sandbox Code Playgroud)\n\n如果是这种情况,简单地替换这九个字节FF FE是不安全的。无法保证这些是文件中唯一在解释为 UTF-8 时无效的字节。只要文件只包含 ASCII 字符就可以,但其他任何字符,例如重音字符 ( \xc3\xa9) 或大引号 ( \xe2\x80\x99),都将被不可挽回地损坏。
项目文件真的应该是 UTF-16 吗?如果不是,则可能某个开发人员的系统正在生成 UTF-16,而版本控制系统需要 UTF-8。我注意到在我的 Visual C# Express 安装中,有一个名为Environment->Documents“当数据无法保存在代码页中时将文档另存为 Unicode”的选项。这听起来可能会导致编码在明显随机的时间发生变化。
| 归档时间: |
|
| 查看次数: |
5406 次 |
| 最近记录: |