2

我对计算机中字符的编码感兴趣。

当我打开我xxx.c的 with 时visual studio code,VS 代码如何检测我的文件的编码并解释这些“01”序列。进一步,Visual Studio 代码(甚至计算机系统)如何根据我的“01”序列文件和字符编码在屏幕上显示字符?

谢谢!

我在项目中也使用中文。有时,文件编码真的让我发疯。有时,例如,我utf-8通过编辑创建的正确文件A被某些B将其解释为GBK文件的文本编辑器破坏了,并且编辑A永远无法将其恢复正确。

我搜索了很多,但大多数答案似乎太抽象或无关紧要。我想弄清楚软件和计算机系统(或操作系统)如何协同工作来完成这项简单但重要的工作!

4

1 回答 1

0

首先,“永远无法找回”:始终使用源代码控制

“软件和计算机系统(或操作系统)如何协同工作来完成这项简单但重要的工作!”:他们不认为这是问题所在!

简短的历史:几十年前,人们使用小型字符集。这个想法是一个系统总是使用同一个。简单的。每次在系统之间传输文本文件时,都会立即将其转录为本地字符编码。然后是文件交换的全球化和需要以不同编码保存文本文件的系统。没有通用的方法来记录编码是什么。1991 年出现了巨大的字符集 Unicode。语言(VB4、Java)、操作系统 API(Win32)、文件系统(NTFS)……开始采用它。但是,它的编码(UTF-8、UTF-16)只是对文本文件进行编码的更多可能性。许多读取文本文件的程序要么依赖于系统默认编码的旧系统,要么依赖于猜测(“检测”)。

在编程世界中,一些语言要求源文件使用特定的编码(比如 UTF-8);在其他情况下,工具默认为特定编码(例如 UTF-8)。在大多数情况下,随 C 或 C++ 实现提供的工具集将具有一组一致的规则。如果您还使用 IDE 或其他形式的项目系统,则可以为整个项目设置编码,在某些情况下还可以设置特定文件。

因此,唯一的解决方案是仅使用适合您的工具并正确配置它们。如果疼痛,请停止这样做。


另外:关于编程和默认字符编码的主题,请注意不要被各种语言库对系统默认字符编码的使用所欺骗——除非这正是需要的。否则,您将给您的用户带来与您遇到的相同的问题。(在 Java 中,只需使用显式参数避免它。在 C 和 C++ 库中,编码被组合到区域设置中。但请注意,许多系统初始化程序以使用默认字符编码。

于 2018-06-09T12:32:45.323 回答