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

2024-03-31

在我们的团队中,我们在 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。

我的问题是:

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

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

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

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


我想我可以提供一些见解what's正在发生,如果不是为什么的话。

FF FE is a BOM http://en.wikipedia.org/wiki/Byte_order_mark;它出现在文件的开头表明该文件的编码是 UTF-16,little-endian。听起来原始文件确实是 UTF-16,但有些东西忽略了 BOM,并将其读取为 UTF-8。

当这种情况发生时,每个字节FF and FE被视为无效并转换为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 字符就可以,但是其他任何字符,例如重音字符 (é) 或大引号 (),将受到不可挽回的破坏。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

由于意外的编码更改,Visual Studio 2008 项目文件无法加载 的相关文章

  • Python:UnicodeDecodeError:“utf8”编解码器无法解码字节

    我正在将一堆 RTF 文件读入 python 字符串中 在某些文本上 我收到此错误 Traceback most recent call last File 11 08 py line 47 in
  • 来自 StreamReader 的原始文件字节,幻数检测

    我试图区分 文本文件 和 二进制 文件 因为我实际上想忽略具有 不可读 内容的文件 我有一个文件 我认为它是 GZIP 存档 我试图通过检测幻数 文件签名来忽略此类文件 如果我在 Notepad 中使用十六进制编辑器插件打开文件 我可以看到
  • Windows命令行参数编码是什么?

    Windows 使用什么编码来传递给在 cmd exe 窗口中启动的程序的命令行参数 命令行参数的编码似乎不受使用控制台代码页设置的影响chcp 我将其设置为 UTF 8 代码页 65001 并使用 Lucida Console 字体 如果
  • fortran中双引号和单引号的区别?

    我刚刚开始使用 Fortran 对双引号和单引号的使用感到困惑 它们是等价的 它们的用法没有区别 您可以使用它来打印引号字符之一 print print 首先打印 进而 注意 您还可以在一行中使用两个引号字符来打印一个 print prin
  • Firebase 数据库 - 编码错误

    我是 Firebase 的新手 我想使用他们的数据库 但编码似乎存在一些问题 这是我使用 UTF 8 编码的示例 json Stack This is madness Overflow 666 这就是当我将 json 导入 Firebase
  • VC++ 中的 getopt()

    我非常喜欢使用 GNUgetopt http www gnu org software libtool manual libc Getopt html 当在Linux 据我所知 getopt 在 MS VC 下不可用 Note Win32环
  • 为什么我的 Visual Studio .obj 文件比输出的 .exe 文件大?

    作为背景 我是一个开源项目的开发人员 一个名为开放框架 http www openframeworks cc 这是不同库的包装器 例如 opengl quicktime freeImage 等 在下一个版本中 我们添加了一个名为 POCO
  • 如何在win32上安装OpenCV 2.0

    我需要在 Win32 上安装 OpenCV 我目前没有安装它 我下载了 OpenCV 2 0 0a win32 exe 并运行它 我现在到底该怎么办 没有 lib之类的东西 我找到了一些使用 cmake 构建版本的说明 http openc
  • Web 服务代码不返回字符串数组

    我想从我的 Web 服务方法返回 abc xyz ghi tru 其中 是分隔符 形式的字符串数组 但是我做不到 这是我当前的网络服务代码 using System using System Collections using System
  • 通过 XMLHTTPRequest 发布时无法设置自定义编码

    从上个版本的chrome浏览器的JS控制台来看 x new XMLHttpRequest x open POST a 2 x setRequestHeader Content Type application x www form urle
  • 在 Visual Studio 中查找所有与 == 进行比较的情况

    我犯了一个错误 使用 来比较 IP 地址 而不是使用 C 中 IPAddress 类的 equals 方法 这将导致比较的是引用而不是值 由于我目前正在研究的解决方案对于一个人项目来说非常大 gt 100 000 行源代码 因此我非常确定我
  • 为什么 RISC-V S-B 和 U-J 指令类型以这种方式编码?

    我正在读一本书 计算机组织与设计RISC V版 我遇到了 S B 和 U J 指令类型的编码 我上面提到的那些类型有奇怪的编码立即字段 S B 类型将直接字段分为两部分 这是有道理的 因为所有指令编码都必须相似 但我无法理解为什么立即字段以
  • 动态设置 Web 应用程序项目的 IISUrl

    我有一个 Web 应用程序项目 我希望能够在完全独立的 IIS 站点上进行分支和开发 而不必每次都继续编辑 vbproj IISUrl 设置 我尝试添加一些标准属性的导入 以便我可以在 WAP 文件之外维护它们 但是当我在元素中引用它们时
  • 无法访问 VBA 中的 COM 公开方法

    我正在尝试在 VBA 中访问 COM 公开的方法 Problem 我看到所有默认方法 例如GetHashCode GetType and ToString 在 VBA 中但是not那些是 COM 接口的一部分并且专门编写为 COM 可见的
  • 如何声明朋友聚会?

    我的解决方案中有 2 个项目 装配 基础库 测试组件 NUnit 我已将测试程序集声明为第一个项目中的朋友程序集 assembly InternalsVisibleTo Company Product Tests 一切都工作正常 直到我意识
  • vs2008循环引用(c#)

    这是我在 vs2008 解决方案中的设置 名为 MyProject Data 的项目中的数据层 名为 MyProject Web 的项目中的 Web 应用程序 MyProject Web 引用了 MyProject Data 在 MyPro
  • 如何以编程方式在 vs 2008 中创建新的空白解决方案?

    基于设计的方法是 新建项目 gt 其他项目类型 gt Visual Studio 解决方案 gt 空白解决方案 我必须在 C 中以编程方式创建一个空白解决方案 并在此解决方案中添加新的空项目和文件 我在网上找到了很多使用 DTE 的代码 但
  • 如何阻止 Visual Studio 在设计器中打开我的 winforms 控件

    当我想编辑 查看我创建的 winforms 控件 表单的代码时 我需要右键单击解决方案并选择 查看代码 打开文件的默认操作是 视图设计器 对于任何包含从 winforms 控件继承的类的 C 文件来说 情况似乎都是如此 即使这是间接继承的
  • MSBuild 未使用所有核心进行构建

    我有一个使用 Visual Studios 2008 配置的项目 当我打开 IDE 并点击构建时 系统上的所有核心都用于构建该项目 但是 当我尝试从命令行构建时 仅使用 1 个核心 这是我正在运行的命令 C Windows Microsof
  • 在 C# .NET 中对非 ASCII 字符进行编码

    我想向我的应用程序发送的电子邮件添加自定义标头 标头名称只能包含 ASCII 字符 但对于值和用户可能会输入 UTF 8 字符 我必须对它们进行 Base64 编码 此外 我还必须将它们解码回 UTF 8 以便在 UI 中向用户显示它们 最

随机推荐

  • Xcode 4.1 (Lion) 和 Xcode 3.2.5 (snow leopard) 之间 .xcdatamodeld 的兼容性问题

    我对使用核心数据的数据模型有疑问 1 我已经在 xcode 4 1 在 lion 上 上使用我的实体及其关系创建了一个数据模型 在右侧的检查器中 我检查了 工具版本 最低 Xcode 3 2 而不是 Xcode 4 1 2 当我尝试重新打开
  • Bootstrap Glyphicons 未使用本地 Bootstrap 版本进行渲染

    我在 django 中使用 bootstrap 它适用于除图标类之外的所有其他 bootstrap 类 例如 class glyphicon glyphicon download alt 右下角有错误的快照 包含 bootstrap min
  • TypeScript 中受控的 prop 名称

    我遇到了 TypeScript 打字问题 找不到任何相关内容 我正在尝试向我的组件添加动态插槽 并希望 props 的名称是一个特定的模板 包括任何字符串 数字和 Slot 字符串 即 custom3Slot 我想要实现的是在我的组件的 p
  • PrestaShop中哪里可以注册全局smarty修饰符?

    我正在创建一个基于 PrestaShop v 1 6 的商店 并且我想注册我的自定义修改器插件 以便可以从任何模板 包括前台和后台模板 访问 问题是where放置注册码 现在我用一个Tools class override添加函数来处理修饰
  • 在 Python 中,如何将整数和字符串列表转换为 Unicode?

    x Some strings 1 2 3 More strings Fanc xc3 xbf string y i decode UTF 8 for i in x 将 x 中的字符串转换为 Unicode 的最佳方法是什么 进行列表压缩会导
  • WatiN 生成空页

    当使用 WatiN 捕获图像时 生成的图像只是空的 纯黑色的 不过 图像的尺寸等于屏幕尺寸 例如 以下代码片段仅保存两个黑色图像 using IE ie new IE ie ClearCache ie BringToFront ie GoT
  • TypeScript 中 ?: 是什么意思?

    我在 Angular 的 TypeScript 声明文件中发现了以下内容 interface IDirective compile templateElement IAugmentedJQuery 什么是 编译后做什么 See 演练 接口
  • HTML 多选不将值发送回 PHP

    我有一个 html 表单中的选择框 它不会将值发送回 php
  • 当应用程序在 Docker 容器中运行时,Swagger UI 给出 ​​404

    在我的项目中 我在 Startup cs 中使用 Swashbuckle 设置了 Swagger public void ConfigureServices IServiceCollection services services AddS
  • Node js中response.send和response.write的区别

    我编写了一个使用 Node js restify 框架的小型 API 该 API 接收请求 实际上是 之后的任何内容 然后将该请求发送到另一台服务器 从服务器获取响应并将响应传递回原始请求源 对于这个 API 我同时使用 Restify 服
  • 使用 dplyr 获取方差为零的列名称

    我试图找到数据中方差为零的任何变量 即恒定连续变量 我想出了如何使用 lapply 来做到这一点 但我想使用 dplyr 因为我试图遵循整洁的数据原则 我可以使用 dplyr 创建一个仅包含方差的向量 但在最后一步我发现值不等于零并返回令我
  • 使用 Powershell Windows 窗体将复选框添加到列表框

    我正在根据我之前的帖子创建一个新问题 在 Powershell Winforms 中更改单个列表框项目的颜色 https stackoverflow com questions 27405945 change the color of in
  • TravisCI 中的 NDK、CMake 和 Android

    我正在尝试为使用一些 C 代码的 Android 项目设置 CI 因此 我需要 Travis Android 映像上未预安装的 NDK 我目前正在通过自己拉动 NDK 来实现这一目标 但是我的 CI 盒子抱怨 CMake 许可证不被接受 奇
  • 具有两列的 LISTAGG 函数

    我有一张这样的桌子 报告 user id Department Position Record id 1 Science Professor 1001 1 Maths 1002 1 History Teacher 1003 2 Scienc
  • 几秒钟后更改 ImageView

    我正在尝试实现一个简单的活动 让用户插入密码 我有一个 gridview 其中包含 9 个要使用的图像和 4 个将作为所选图像的图像视图 单击 gridview 上的项目时 相应的图像将填充所选图像 现在的问题是 我希望 4 个图像视图的行
  • 如何在 Laravel 中设置会话超时?

    是否有一种固有的方法可以将会话设置为在特定时间后过期 我当前的设置似乎将在 30 分钟后过期 我想禁用它或至少增加它 但我在 Laravel 中找不到可以设置此设置的任何位置 In app config session php你有 life
  • 从 Rails 3 控制器返回的凌乱的视图

    在我的 Rails 3 应用程序控制器上 我有以下代码 array Location all each x array lt
  • JavaScript 中有类似 C# 区域的东西吗?视觉工作室 2017

    我正在为一些人工作 他们希望将自己的 JavaScript 库组织成不同的类别 CRUD 函数 表单函数等 他们真的很喜欢 C 中区域的实用性 并且在 JavaScript 文件中要求这样做 有什么建议么 我正在使用 Visual Stud
  • 从 php 标头下载的 Mp3 文件不起作用

    你好呀 好的 事情就这样了 我的服务器上有我的 mp3 文件 每个文件都在其自己的文件夹中 该文件夹中有 mp3 和一个包含以下脚本的 php 文件 问题是 当我点击进入该 php 页面时 标头应该会自动下载 mp3 文件 但当它下载时 它
  • 由于意外的编码更改,Visual Studio 2008 项目文件无法加载

    在我们的团队中 我们在 Visual Studio 2008 中有一个数据库项目 该项目由 Team Foundation Server 进行源代码控制 每隔两周左右 一位同事签入后 项目文件将无法加载到其他开发人员的计算机上 错误信息是