从 UTF-8 更改为 ANSI 的文件

Files changing from UTF-8 to ANSI

提问人:LCain 提问时间:6/27/2023 最后编辑:Thomas DickeyLCain 更新时间:6/28/2023 访问量:116

问:

我对计算机有一点了解,但这个让我感到困惑。

背景:我正准备在无法安装 Python 的环境中向中学生教授 Python。我正在尝试使用内置 Python 的在线 IDE,并在本地存储 .py 文件。

我在家里创建文件,保存到拇指驱动器,并在学校使用我的学校机器访问它们。当我保存文件时,它们显示为 UTF-8,我可以关闭它们并重新加载,一切都很好。当我在学校机器上打开它们时,它们是狼吞虎咽的,显示为 ANSI。我使用了几个编辑器,主要是 Notepad++ 来处理文件。Notepad++ 编码设置为 UTF-8,所以我不确定 ANSI 来自哪里。在 Notepad++ 中使用“转换为 UTF-8”功能似乎没有任何作用。我尝试在传输之前将文件设置为只读,但这似乎没有帮助。回到我的家庭计算机,该文件现在是 ANSI,无法在创建它的计算机上打开。我还尝试将文件保存为 .txt,结果相同。

任何见解都将不胜感激。

使用记事本、记事本++、word、Thonny、Online-Python、Wing等编辑器。

设置 Notepad++ 设置...偏好。。。将新文档转换为 UTF-8 应用于打开的 ANSI 文件

Python UTF-8 记事本++ ANSI

评论

1赞 slothrop 6/27/2023
“回到我的家用计算机,该文件现在是 ANSI,无法在创建它的计算机上打开。”自上次在家用计算机上打开文件以来,该文件是否显示为已修改?(您应该能够从文件时间戳中推断出来)
1赞 Mark Tolonen 6/27/2023
该文件包含什么?“gobbledygook”不是很有描述性。例如,当原始版本为 UTF-8 但被视为 Windows-1252(美国和西欧 Windows 的典型“ANSI”默认值)时,看起来像是这样。该文件仍编码为 UTF-8,但查看器误解了。s="print('马克')""print('马克')"
1赞 Ulrich Eckhardt 6/27/2023
gobbledygook 的技术术语是 mojibake。也就是说,UTF-8 和 ANSI 是解释字节序列的方法。每个 UTF-8 字节序列都可以解释为 ANSI,但反之则不然。因此,如果任何编辑器默认将文件解释为 ANSI,则解决此问题的正确方法是告诉编辑器正确的解释(也称为编码)。告诉它转换绝对不是你想要的!
0赞 liginity 6/27/2023
我建议当您在学校机器上打开文件(在家工作)并看到记事本++显示ANSI作为编码时,您可以右键单击状态栏中的“ANSI”部分并将其更改为UTF-8。在此之后,应显示正确的文本。
0赞 Giacomo Catenazzi 6/27/2023
您应该尝试自己进行调试。尝试使用清晰的 Unicode 创建一个 python 代码(使用拉丁语、希腊语、印度语、中文/日语单词:从维基百科文章中复制它们,例如关于城市,并复制本地名称)(例如,只有一个变量的 python 文件:字符串。检查此类文件的大小,并检查源代码流动的所有步骤。获取错误开始的位置。注意:Python3 默认为 UTF-8,Web 也是。因此,您应该真正调试它(而不仅仅是解决方法),否则您每次都会遇到问题。真。

答:

0赞 Mark Ransom 6/28/2023 #1

Windows 不会以任何方式记录文件的编码。由打开文件的应用程序决定使用哪种编码。

记事本等应用程序尝试通过查看文件的一部分来猜测编码。有时他们弄错了。问题在于 ANSI 始终有效,因为没有无效的字节值。但正如你所注意到的,有效并不意味着它是正确的。

Windows 中经常使用的一个约定是以字节顺序标记 (BOM) 开始文件,以指示文件是 UTF-8。记事本和 Python 都会识别这一点并正确解码您的文件。