首先,“永远无法找回”:始终使用源代码控制
“软件和计算机系统(或操作系统)如何协同工作来完成这项简单但重要的工作!”:他们不认为这是问题所在!
简短的历史:几十年前,人们使用小型字符集。这个想法是一个系统总是使用同一个。简单的。每次在系统之间传输文本文件时,都会立即将其转录为本地字符编码。然后是文件交换的全球化和需要以不同编码保存文本文件的系统。没有通用的方法来记录编码是什么。1991 年出现了巨大的字符集 Unicode。语言(VB4、Java)、操作系统 API(Win32)、文件系统(NTFS)……开始采用它。但是,它的编码(UTF-8、UTF-16)只是对文本文件进行编码的更多可能性。许多读取文本文件的程序要么依赖于系统默认编码的旧系统,要么依赖于猜测(“检测”)。
在编程世界中,一些语言要求源文件使用特定的编码(比如 UTF-8);在其他情况下,工具默认为特定编码(例如 UTF-8)。在大多数情况下,随 C 或 C++ 实现提供的工具集将具有一组一致的规则。如果您还使用 IDE 或其他形式的项目系统,则可以为整个项目设置编码,在某些情况下还可以设置特定文件。
因此,唯一的解决方案是仅使用适合您的工具并正确配置它们。如果疼痛,请停止这样做。
另外:关于编程和默认字符编码的主题,请注意不要被各种语言库对系统默认字符编码的使用所欺骗——除非这正是需要的。否则,您将给您的用户带来与您遇到的相同的问题。(在 Java 中,只需使用显式参数避免它。在 C 和 C++ 库中,编码被组合到区域设置中。但请注意,许多系统初始化程序以使用默认字符编码。