(请注意,我在 Stack Overflow 中发布了我问题的先前版本)
您好,我正在尝试在记事本中将多个文件从 UTF-8 更改为 ANSI。我的目标是按照课程要求将它们更改为 ANSI,这样我就可以将这些文件导入 MySQL。
具体来说,我想知道如何转变文件从 UTF-8 转换为 ANSI,正如我所学到的这里我需要转换,而不仅仅是更改编码。或者,我可能需要知道如何覆盖文件。
到目前为止,我使用“打开为...”选项在记事本中打开一个 csv 文件,选择 ANSI 编码,然后单击“保存”。当弹出警告说某些 Unicode 字符将在 ANSI 中丢失时,我单击了“确定”。但是,当我返回“另存为”页面检查是否更改了所有文件时,有些文件已改回 UTF-8 编码。我的导师说如果我覆盖文件,编码应该会改变……我还没有点击“覆盖”选项,那么我怎么知道我是否覆盖了它?
如果您的解决方案涉及在文本中插入代码,请说明此文本转换代码如何不会成为 MySQL 中代码的一部分,因为我对在文本文件中插入代码如何在 SQL 中更改代码和其中的数据感到困惑。这就是我在学习这些应用程序的过程中所处的位置...
我读过关于不同编码类型的文章,它们支持不同的字符。不会改变编码的文件确实包含非拉丁字符。虽然编码这个话题很有意义,但我从课程中得到的信息是,我应该能够用 ANSI 编码保存所有文件,然后导入 mysql。我读过这里关于将所有文件以 UTF-8 格式导入到 sql,但似乎我的文件中有很多东西可能会弄乱。在这个阶段,如果可能的话,我会更有信心找到一种方法将文件转换为 ANSI,然后从那里导入。
我感觉我在这里倾倒了很多信息,因为我尝试了几种不同的方法。有人知道我在这里遗漏了什么吗,或者有解决方法吗?
答案1
我的目标是按照课程要求将它们更改为 ANSI,以便我可以将这些文件导入 MySQL
这不合逻辑。MySQL 已经支持加载 UTF-8 CSV 文件近 20 年了。
到目前为止,我使用“打开为...”选项在记事本中打开一个 csv 文件,选择 ANSI 编码,然后单击“保存”。当弹出警告说 ANSI 中某些 Unicode 字符会丢失时,我单击了“确定”
这是转换文件的错误方法。指定错误的字符集打开时间不会改变任何东西——它只会曲解字节就好像它们已经被转换了一样,这(取决于您所在地区“ANSI”的含义)最终可能会被映射到完全错误的字符。
相反,你需要用当前的字符集打开文件,让编辑器了解字节解码后的字符,以及节省将其作为您想要的新字符集。
这就像转换图像:如果您有 PNG,则不会将其作为 JPEG 打开 - 而是将其作为 PNG 打开,然后将其保存为 JPEG。
(请记住,实际上没有一个名为“ANSI”的字符集——它是区域相关的,因此在你的操作系统中算作“ANSI”的可能是 Windows-1251,也可能是 cp1252、cp1257,……甚至假设你有要用它将数据加载到某个有 30 年历史的数据库中,更好的选择是使用明确采用实际字符集名称的编辑器或转换器。)
答案2
一个好方法是使用 Powershell:
Get-Content .\test.txt | Set-Content -Encoding ansi test-ansi.txt
例如,如果您需要更改目录中所有文件的编码,则可以轻松地将循环应用于此。请参阅Get-Help foreach