鱼C论坛

 找回密码
 立即注册
查看: 1287|回复: 18

[已解决]困擾我多年的第28講課後動動手OpenMe.mp3

[复制链接]
发表于 2022-7-4 22:22:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代碼
#! /usr/bin/env python3

f = open('OpenMe.mp3', 'rb')

for each_line in f:
        print(each_line, end='')
f.close()

打印
b'\xb3\xa4\xc6\xda\xca\xb9\xd3\xc3Windows\xb2\xd9\xd7\xf7\xcf\xb5\xcd\xb3\xb5\xc4\xc5\xf3\xd3\xd1\xba\xdc\xc8\xdd\xd2\xd7\xb1\xbb\xc0\xa9\xd5\xb9\xc3\xfb\xcb\xf9\xce\xf3\xb5\xbc\xa3\xac\xc8\xcf\xce\xaa\xc0\xa9\xd5\xb9\xc3\xfb\xbe\xf6\xb6\xa8\xce\xc4\xbc\xfe\xc0\xe0\xd0\xcd\xa3\xac\xc6\xe4\xca\xb5\xd5\xe2\xd6\xd6\xb9\xdb\xc4\xee\xca\xc7\xb4\xed\xce\xf3\xb5\xc4\xa3\xa1\r\n'b'\r\n'b'\xc6\xe4\xca\xb5\xd5\xe2\xbe\xcd\xb8\xfa\xd2\xbb\xb8\xf6\xd0\xd5\xd5\xc5\xb5\xc4\xbb\xb5\xc8\xcb\xa3\xac\xbe\xa1\xb9\xdc\xb0\xd1\xc3\xfb\xd7\xd6\xb8\xc4\xce\xaa\xc1\xcb\xa1\xb0\xd5\xc5\xba\xc3\xc8\xcb\xa1\xb1\xa3\xac\xb5\xab\xcb\xfb\xbb\xb9\xca\xc7\xd2\xbb\xb8\xf6\xbb\xb5\xc8\xcb\xca\xc7\xd2\xbb\xb8\xf6\xb5\xc0\xc0\xed\xb5\xc4^_^\r\n'b'\r\n'b'\xb9\xd8\xd3\xda\xce\xc4\xbc\xfe\xb5\xc4\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb3\xf5\xd1\xa7\xd5\xdf\xc8\xdd\xd2\xd7\xd7\xdf\xbd\xf8\xb5\xc4\xce\xf3\xc7\xf8\xa3\xba\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xd2\xbb\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb5\xc4\xb1\xd8\xd2\xaa\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\r\n'b'\r\n'b'\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xbf\xc9\xd2\xd4\xd3\xd0\xbb\xf2\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb6\xd4\xd3\xda\xb4\xf2\xbf\xaa\xce\xc4\xbc\xfe\xb2\xd9\xd7\xf7\xa3\xac\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xd0\xe8\xd2\xaa\xd1\xa1\xd4\xf1\xb3\xcc\xd0\xf2\xc8\xa5\xb4\xf2\xbf\xaa\xcb\xfc\xa3\xac\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xbb\xe1\xd7\xd4\xb6\xaf\xd3\xc3\xc9\xe8\xd6\xc3\xba\xc3\xb5\xc4\xb3\xcc\xd0\xf2\xa3\xa8\xc8\xe7\xd3\xd0\xa3\xa9\xc8\xa5\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa3\xa8\xca\xc7\xa1\xb0\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa1\xb1\xa3\xac\xb6\xf8\xb2\xbb\xca\xc7\xa1\xb0\xb4\xf2\xbf\xaa\xa1\xb1\xb5\xc4\xd4\xad\xd2\xf2\xb2\xce\xbf\xb4\xcf\xc2\xc3\xe6\xb5\xc4\xb5\xda2\xb8\xf6\xce\xf3\xc7\xf8\xa3\xa9\xa3\xac\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xb3\xa3\xb9\xe6\xce\xc4\xbc\xfe\xb5\xc4\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\xa3\xac\xb5\xab\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb2\xa2\xb2\xbb\xd2\xbb\xb6\xa8\xd0\xe8\xd2\xaa\xd2\xbb\xb8\xf6\xc0\xa9\xd5\xb9\xc3\xfb\xa1\xa3\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xb6\xfe\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xb1\xed\xc3\xf7\xc1\xcb\xb8\xc3\xce\xc4\xbc\xfe\xca\xc7\xba\xce\xd6\xd6\xc0\xe0\xd0\xcd\r\n'b'\r\n'b'\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xbf\xc9\xd2\xd4\xc8\xcb\xce\xaa\xc9\xe8\xb6\xa8\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaTXT\xb5\xc4\xce\xc4\xbc\xfe\xd3\xd0\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xd5\xc5\xcd\xbc\xc6\xac\xa3\xac\xcd\xac\xd1\xf9\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaM-P3\xb5\xc4\xce\xc4\xbc\xfe\xa3\xac\xd2\xc0\xc8\xbb\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xb8\xf6\xca\xd3\xc6\xb5\xa1\xa3'

代碼
(由[课后作业] 第028讲:文件:因为懂你,所以永恒 | 课后测试题及答案的解答直接複製)
f = open('OpenMe.mp3')
for each_line in f:
        print(each_line, end='')
f.close()

報錯
Traceback (most recent call last):
  File "D:\program-training\python-training\use2.py", line 4, in <module>
    for each_line in f:
UnicodeDecodeError: 'cp950' codec can't decode byte 0xc8 in position 31: illegal multibyte sequence

用utf-8 encoding
f = open('OpenMe.mp3', encoding='utf-8')
for each_line in f:
        print(each_line, end='')
f.close()

報錯
Traceback (most recent call last):
  File "D:\program-training\python-training\use2.py", line 4, in <module>
    for each_line in f:
  File "D:\software\python\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte

到底是要打印出來啥,是上面那一大串二進制的東西嗎?
有辦法解決報錯問題嗎?
以前有發過一次文,和一位魚友講著講著就沒下文了
當時就那樣放著了(這個mp3也因為這樣在我的桌面放了快2年哈哈)
希望這次能有魚友能給一些新思路
(我也看了一些英文網站,像是stack overflow,
但大家情況都不太一樣,版本環境啥的也有影響,
看了一圈還是沒有解決我的疑惑...)
最佳答案
2022-7-5 09:57:49
一隻太平洋睡鯊 发表于 2022-7-5 08:55
我是了也是打印出

所以就是要打印出這一串東東?
#! /usr/bin/env python3

f = open('OpenMe.mp3', 'rb')

for each_line in f:
        print(each_line, end='')
f.close()
b'\xb3\xa4\xc6\xda\xca\xb9\xd3\xc3Windows\xb2\xd9\xd7\xf7\xcf\xb5\xcd\xb3\xb5\xc4\xc5\xf3\xd3\xd1\xba\xdc\xc8\xdd\xd2\xd7\xb1\xbb\xc0\xa9\xd5\xb9\xc3\xfb\xcb\xf9\xce\xf3\xb5\xbc\xa3\xac\xc8\xcf\xce\xaa\xc0\xa9\xd5\xb9\xc3\xfb\xbe\xf6\xb6\xa8\xce\xc4\xbc\xfe\xc0\xe0\xd0\xcd\xa3\xac\xc6\xe4\xca\xb5\xd5\xe2\xd6\xd6\xb9\xdb\xc4\xee\xca\xc7\xb4\xed\xce\xf3\xb5\xc4\xa3\xa1\r\n'b'\r\n'b'\xc6\xe4\xca\xb5\xd5\xe2\xbe\xcd\xb8\xfa\xd2\xbb\xb8\xf6\xd0\xd5\xd5\xc5\xb5\xc4\xbb\xb5\xc8\xcb\xa3\xac\xbe\xa1\xb9\xdc\xb0\xd1\xc3\xfb\xd7\xd6\xb8\xc4\xce\xaa\xc1\xcb\xa1\xb0\xd5\xc5\xba\xc3\xc8\xcb\xa1\xb1\xa3\xac\xb5\xab\xcb\xfb\xbb\xb9\xca\xc7\xd2\xbb\xb8\xf6\xbb\xb5\xc8\xcb\xca\xc7\xd2\xbb\xb8\xf6\xb5\xc0\xc0\xed\xb5\xc4^_^\r\n'b'\r\n'b'\xb9\xd8\xd3\xda\xce\xc4\xbc\xfe\xb5\xc4\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb3\xf5\xd1\xa7\xd5\xdf\xc8\xdd\xd2\xd7\xd7\xdf\xbd\xf8\xb5\xc4\xce\xf3\xc7\xf8\xa3\xba\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xd2\xbb\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb5\xc4\xb1\xd8\xd2\xaa\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\r\n'b'\r\n'b'\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xbf\xc9\xd2\xd4\xd3\xd0\xbb\xf2\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb6\xd4\xd3\xda\xb4\xf2\xbf\xaa\xce\xc4\xbc\xfe\xb2\xd9\xd7\xf7\xa3\xac\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xd0\xe8\xd2\xaa\xd1\xa1\xd4\xf1\xb3\xcc\xd0\xf2\xc8\xa5\xb4\xf2\xbf\xaa\xcb\xfc\xa3\xac\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xbb\xe1\xd7\xd4\xb6\xaf\xd3\xc3\xc9\xe8\xd6\xc3\xba\xc3\xb5\xc4\xb3\xcc\xd0\xf2\xa3\xa8\xc8\xe7\xd3\xd0\xa3\xa9\xc8\xa5\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa3\xa8\xca\xc7\xa1\xb0\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa1\xb1\xa3\xac\xb6\xf8\xb2\xbb\xca\xc7\xa1\xb0\xb4\xf2\xbf\xaa\xa1\xb1\xb5\xc4\xd4\xad\xd2\xf2\xb2\xce\xbf\xb4\xcf\xc2\xc3\xe6\xb5\xc4\xb5\xda2\xb8\xf6\xce\xf3\xc7\xf8\xa3\xa9\xa3\xac\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xb3\xa3\xb9\xe6\xce\xc4\xbc\xfe\xb5\xc4\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\xa3\xac\xb5\xab\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb2\xa2\xb2\xbb\xd2\xbb\xb6\xa8\xd0\xe8\xd2\xaa\xd2\xbb\xb8\xf6\xc0\xa9\xd5\xb9\xc3\xfb\xa1\xa3\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xb6\xfe\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xb1\xed\xc3\xf7\xc1\xcb\xb8\xc3\xce\xc4\xbc\xfe\xca\xc7\xba\xce\xd6\xd6\xc0\xe0\xd0\xcd\r\n'b'\r\n'b'\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xbf\xc9\xd2\xd4\xc8\xcb\xce\xaa\xc9\xe8\xb6\xa8\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaTXT\xb5\xc4\xce\xc4\xbc\xfe\xd3\xd0\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xd5\xc5\xcd\xbc\xc6\xac\xa3\xac\xcd\xac\xd1\xf9\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaM-P3\xb5\xc4\xce\xc4\xbc\xfe\xa3\xac\xd2\xc0\xc8\xbb\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xb8\xf6\xca\xd3\xc6\xb5\xa1\xa3'

这个是因为你使用 'rb' 打开的文件
就是你用二进制打开的,可以看到输出的字符串最前面有一个字母 b
说明这个字符串是二进制形式的


f = open('OpenMe.mp3')
for each_line in f:
        print(each_line, end='')
f.close()
$ cat main.py
f = open('OpenMe.mp3')
for each_line in f:
        print(each_line, end='')
f.close()
$ python main.py
Traceback (most recent call last):
  File "/tmp/main.py", line 2, in <module>
    for each_line in f:
  File "/usr/lib/python3.10/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte
$

这个我这边也报错
如果你在open的参数中不指定编码,默认就使用当前系统的编码,我这个系统使用的utf-8编码
而OpenMe.mp3这个文件的编码是gb18030,怎么知道的?我用vim打开这个文件,右下角显示这个文件的编码是gb18030
$ cat main.py
f = open('OpenMe.mp3', encoding='gb18030')
for each_line in f:
        print(each_line, end='')
f.close()
$ python main.py
长期使用Windows操作系统的朋友很容易被扩展名所误导,认为扩展名决定文件类型,其实这种观念是错误的!

其实这就跟一个姓张的坏人,尽管把名字改为了“张好人”,但他还是一个坏人是一个道理的^_^

关于文件的扩展名,初学者容易走进的误区:

误区一:文件扩展名是一个文件的必要构成部分

一个文件可以有或没有扩展名,对于打开文件操作,没有扩展名的文件需要选择程序去打开它,有扩展名的文件会自动用设置好的程序(如有)去尝试打开(是“尝试打开”,而不是“打开”的原因参看下面的第2个误区),文件扩展名是一个常规文件的构成部分,但一个文件并不一定需要一个扩展名。

误区二:文件扩展名表明了该文件是何种类型

文件扩展名可以人为设定,扩展名为TXT的文件有可能是一张图片,同样,扩展名为M-P3的文件,依然可能是一个视频。$
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-4 22:37:19 | 显示全部楼层
#!/usr/bin/env python
#coding=utf-8

f = open('OpenMe.mp3', 'rb')

for each_line in f:
        print(each_line, end='')
f.close()

代码也保存为utf-8编码,我这边正常

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 感謝回覆~

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 00:24:52 | 显示全部楼层
本帖最后由 jackz007 于 2022-7-5 00:49 编辑

        错误的原因是你的系统使用繁体中文,缺省编码是 "CP950",而文件 'OpenMe.mp3' 使用的编码是 "GB2312",所以,在你的电脑上即不能用缺省编码也不能使用 "UTF-8" 编码,必须使用 "GB2312" 编码来打开这个文件。
        为了证明上述说法,下面就拿楼主所打印输出的字节串开刀。
s = b'\xb3\xa4\xc6\xda\xca\xb9\xd3\xc3Windows\xb2\xd9\xd7\xf7\xcf\xb5\xcd\xb3\xb5\xc4\xc5\xf3\xd3\xd1\xba\xdc\xc8\xdd\xd2\xd7\xb1\xbb\xc0\xa9\xd5\xb9\xc3\xfb\xcb\xf9\xce\xf3\xb5\xbc\xa3\xac\xc8\xcf\xce\xaa\xc0\xa9\xd5\xb9\xc3\xfb\xbe\xf6\xb6\xa8\xce\xc4\xbc\xfe\xc0\xe0\xd0\xcd\xa3\xac\xc6\xe4\xca\xb5\xd5\xe2\xd6\xd6\xb9\xdb\xc4\xee\xca\xc7\xb4\xed\xce\xf3\xb5\xc4\xa3\xa1\r\n'b'\r\n'b'\xc6\xe4\xca\xb5\xd5\xe2\xbe\xcd\xb8\xfa\xd2\xbb\xb8\xf6\xd0\xd5\xd5\xc5\xb5\xc4\xbb\xb5\xc8\xcb\xa3\xac\xbe\xa1\xb9\xdc\xb0\xd1\xc3\xfb\xd7\xd6\xb8\xc4\xce\xaa\xc1\xcb\xa1\xb0\xd5\xc5\xba\xc3\xc8\xcb\xa1\xb1\xa3\xac\xb5\xab\xcb\xfb\xbb\xb9\xca\xc7\xd2\xbb\xb8\xf6\xbb\xb5\xc8\xcb\xca\xc7\xd2\xbb\xb8\xf6\xb5\xc0\xc0\xed\xb5\xc4^_^\r\n'b'\r\n'b'\xb9\xd8\xd3\xda\xce\xc4\xbc\xfe\xb5\xc4\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb3\xf5\xd1\xa7\xd5\xdf\xc8\xdd\xd2\xd7\xd7\xdf\xbd\xf8\xb5\xc4\xce\xf3\xc7\xf8\xa3\xba\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xd2\xbb\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb5\xc4\xb1\xd8\xd2\xaa\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\r\n'b'\r\n'b'\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xbf\xc9\xd2\xd4\xd3\xd0\xbb\xf2\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb6\xd4\xd3\xda\xb4\xf2\xbf\xaa\xce\xc4\xbc\xfe\xb2\xd9\xd7\xf7\xa3\xac\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xd0\xe8\xd2\xaa\xd1\xa1\xd4\xf1\xb3\xcc\xd0\xf2\xc8\xa5\xb4\xf2\xbf\xaa\xcb\xfc\xa3\xac\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xbb\xe1\xd7\xd4\xb6\xaf\xd3\xc3\xc9\xe8\xd6\xc3\xba\xc3\xb5\xc4\xb3\xcc\xd0\xf2\xa3\xa8\xc8\xe7\xd3\xd0\xa3\xa9\xc8\xa5\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa3\xa8\xca\xc7\xa1\xb0\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa1\xb1\xa3\xac\xb6\xf8\xb2\xbb\xca\xc7\xa1\xb0\xb4\xf2\xbf\xaa\xa1\xb1\xb5\xc4\xd4\xad\xd2\xf2\xb2\xce\xbf\xb4\xcf\xc2\xc3\xe6\xb5\xc4\xb5\xda2\xb8\xf6\xce\xf3\xc7\xf8\xa3\xa9\xa3\xac\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xb3\xa3\xb9\xe6\xce\xc4\xbc\xfe\xb5\xc4\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\xa3\xac\xb5\xab\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb2\xa2\xb2\xbb\xd2\xbb\xb6\xa8\xd0\xe8\xd2\xaa\xd2\xbb\xb8\xf6\xc0\xa9\xd5\xb9\xc3\xfb\xa1\xa3\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xb6\xfe\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xb1\xed\xc3\xf7\xc1\xcb\xb8\xc3\xce\xc4\xbc\xfe\xca\xc7\xba\xce\xd6\xd6\xc0\xe0\xd0\xcd\r\n'b'\r\n'b'\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xbf\xc9\xd2\xd4\xc8\xcb\xce\xaa\xc9\xe8\xb6\xa8\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaTXT\xb5\xc4\xce\xc4\xbc\xfe\xd3\xd0\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xd5\xc5\xcd\xbc\xc6\xac\xa3\xac\xcd\xac\xd1\xf9\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaM-P3\xb5\xc4\xce\xc4\xbc\xfe\xa3\xac\xd2\xc0\xc8\xbb\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xb8\xf6\xca\xd3\xc6\xb5\xa1\xa3'

s = s . decode('gb2312')
print(s)
        这是运行结果
D:\[00.Exerciese.2022]\Python>python x.py
长期使用Windows操作系统的朋友很容易被扩展名所误导,认为扩展名决定文件类型,其实
这种观念是错误的!

其实这就跟一个姓张的坏人,尽管把名字改为了“张好人”,但他还是一个坏人是一个道理
的^_^

关于文件的扩展名,初学者容易走进的误区:

误区一:文件扩展名是一个文件的必要构成部分

一个文件可以有或没有扩展名,对于打开文件操作,没有扩展名的文件需要选择程序去打开
它,有扩展名的文件会自动用设置好的程序(如有)去尝试打开(是“尝试打开”,而不是
“打开”的原因参看下面的第2个误区),文件扩展名是一个常规文件的构成部分,但一个
文件并不一定需要一个扩展名。

误区二:文件扩展名表明了该文件是何种类型

文件扩展名可以人为设定,扩展名为TXT的文件有可能是一张图片,同样,扩展名为M-P3的
文件,依然可能是一个视频。

D:\[00.Exerciese.2022]\Python>
        所以,楼主的代码必须这样写:
#! /usr/bin/env python3

f = open('OpenMe.mp3', encoding = 'GB2312')

for each_line in f:
        print(each_line)
f . close()
        就是有一点不敢确定,简体中文的字符在你们 BIG5 的系统下是否能够正常显示。

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 06:51:02 | 显示全部楼层


Python 的 open 函数打开的编码,和文件默认编码不一致,导致报错

所以你可以将 OpenMe.mp3 文件右击选择打开方式,然后选择笔记本,笔记本打开后选择文件->另存为

会弹出另存为窗口,在另存为窗口右下角可以设置保存编码,你选择 utf-8 那么就要加上 encoding = "utf-8"

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 08:55:06 | 显示全部楼层
人造人 发表于 2022-7-4 22:37
代码也保存为utf-8编码,我这边正常

我是了也是打印出
b'\xb3\xa4\xc6\xda\xca\xb9\xd3\xc3Windows\xb2\xd9\xd7\xf7\xcf\xb5\xcd\xb3\xb5\xc4\xc5\xf3\xd3\xd1\xba\xdc\xc8\xdd\xd2\xd7\xb1\xbb\xc0\xa9\xxac\xc6\xe4\xca\xb5\xd5\xe2\xd6\xd6\xb9\xdb\xc4\xee\xca\xc7\xb4\xed\xce\xf3\xb5\xc4\xa3\xa1\r\n'b'\r\n'b'\xc6\xe4\xca\xb5\xd5\xe2\xbe\xcd\xb8\xfa\xd2\xbb\xb8\xf6\xd0\xd5\xd5\xc5\xb5\xc4\xbb\xb5\xc8\xcb\xa3\xac\xbe\xa1\xb9\xdc\xb0\xd1\xc3\xfb\xd7\xd6\xb8\xc4\xce\xaa\xc1\xcb\xa1\xb0\xd5\xc5\xba\xc3\xc8\xcb\xa1\xb1\xa3\xac\xb5\xab\xcb\xfb\xbb\xb9\xca\xc7\xd2\xbb\xb8\xf6\xbb\xb5\xc8\xcb\xca\xc7\xd2\xbb\xb8\xf6\xb5\xc0\xc0\xed\xb5\xc4^_^\r\n'b'\r\n'b'\xb9\xd8\xd3\xda\xce\xc4\xbc\xfe\xb5\xc4\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb3\xf5\xd1\xa7\xd5\xdf\xc8\xdd\xd2\xd7\xd7\xdf\xbd\xf8\xb5\xc4\xce\xf3\xc7\xf8\xa3\xba\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xd2\xbb\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb5\xc4\xb1\xd8\xd2\xaa\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\r\n'b'\r\n'b'\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xbf\xc9\xd2\xd4\xd3\xd0\xbb\xf2\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb6\xd4\xd3\xda\xb4\xf2\xbf\xaa\xce\xc4\xbc\xfe\xb2\xd9\xd7\xf7\xa3\xac\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xd0\xe8\xd2\xaa\xd1\xa1\xd4\xf1\xb3\xcc\xd0\xf2\xc8\xa5\xb4\xf2\xbf\xaa\xcb\xfc\xa3\xac\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xbb\xe1\xd7\xd4\xb6\xaf\xd3\xc3\xc9\xe8\xd6\xc3\xba\xc3\xb5\xc4\xb3\xcc\xd0\xf2\xa3\xa8\xc8\xe7\xd3\xd0\xa3\xa9\xc8\xa5\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa3\xa8\xca\xc7\xa1\xb0\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa1\xb1\xa3\xac\xb6\xf8\xb2\xbb\xca\xc7\xa1\xb0\xb4\xf2\xbf\xaa\xa1\xb1\xb5\xc4\xd4\xad\xd2\xf2\xb2\xce\xbf\xb4\xcf\xc2\xc3\xe6\xb5\xc4\xb5\xda2\xb8\xf6\xce\xf3\xc7\xf8\xa3\xa9\xa3\xac\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xb3\xa3\xb9\xe6\xce\xc4\xbc\xfe\xb5\xc4\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\xa3\xac\xb5\xab\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb2\xa2\xb2\xbb\xd2\xbb\xb6\xa8\xd0\xe8\xd2\xaa\xd2\xbb\xb8\xf6\xc0\xa9\xd5\xb9\xc3\xfb\xa1\xa3\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xb6\xfe\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xb1\xed\xc3\xf7\xc1\xcb\xb8\xc3\xce\xc4\xbc\xfe\xca\xc7\xba\xce\xd6\xd6\xc0\xe0\xd0\xcd\r\n'b'\r\n'b'\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xbf\xc9\xd2\xd4\xc8\xcb\xce\xaa\xc9\xe8\xb6\xa8\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaTXT\xb5\xc4\xce\xc4\xbc\xfe\xd3\xd0\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xd5\xc5\xcd\xbc\xc6\xac\xa3\xac\xcd\xac\xd1\xf9\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaM-P3\xb5\xc4\xce\xc4\xbc\xfe\xa3\xac\xd2\xc0\xc8\xbb\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xb8\xf6\xca\xd3\xc6\xb5\xa1\xa3'
所以就是要打印出這一串東東?
為什麼小甲魚的解答不用加'rb'啊?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 09:48:45 | 显示全部楼层
jackz007 发表于 2022-7-5 00:24
错误的原因是你的系统使用繁体中文,缺省编码是 "CP950",而文件 'OpenMe.mp3' 使用的编码是 "GB23 ...

所以windows的繁體系統一般使用CP950(還是MS950? 好像兩個編碼都以950為基礎,所以沒有差很多,看別人測試,是有差幾個字,但一般使用上,幾乎可以通用,有辦法知道自己的系統編碼到底是啥嗎?)
而一般簡體系統的編碼使用GB2312
所以我無法使用繁體的CP950(或MS950)解碼GB2312的文件
而我剛剛嘗試,將系統編碼改為windows10提供的"Beta: 使用Unicode UTF-8提供全球語言支援"
並且使用
#!/usr/bin/env python
#coding=utf-8

f = open('OpenMe.mp3', encoding='utf-8')

for each_line in f:
        print(each_line, end='')
f.close()

一樣是報錯
Traceback (most recent call last):
  File "D:\program-training\python-training\use2.py", line 6, in <module>
    for each_line in f:
  File "D:\software\python\lib\codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte

看來在繁體系統的環境下
不管是本身使用CP950、MS950還是Unicode UTF-8的編碼系統
都無法解碼GB2312編碼的文件,必須指定編譯器使用GB2312解碼才可以
f = open('OpenMe.mp3', encoding='GB2312')
for each_line in f:
        print(each_line, end='')
f.close()
(↑能正常打印)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 09:57:49 | 显示全部楼层    本楼为最佳答案   
一隻太平洋睡鯊 发表于 2022-7-5 08:55
我是了也是打印出

所以就是要打印出這一串東東?
#! /usr/bin/env python3

f = open('OpenMe.mp3', 'rb')

for each_line in f:
        print(each_line, end='')
f.close()
b'\xb3\xa4\xc6\xda\xca\xb9\xd3\xc3Windows\xb2\xd9\xd7\xf7\xcf\xb5\xcd\xb3\xb5\xc4\xc5\xf3\xd3\xd1\xba\xdc\xc8\xdd\xd2\xd7\xb1\xbb\xc0\xa9\xd5\xb9\xc3\xfb\xcb\xf9\xce\xf3\xb5\xbc\xa3\xac\xc8\xcf\xce\xaa\xc0\xa9\xd5\xb9\xc3\xfb\xbe\xf6\xb6\xa8\xce\xc4\xbc\xfe\xc0\xe0\xd0\xcd\xa3\xac\xc6\xe4\xca\xb5\xd5\xe2\xd6\xd6\xb9\xdb\xc4\xee\xca\xc7\xb4\xed\xce\xf3\xb5\xc4\xa3\xa1\r\n'b'\r\n'b'\xc6\xe4\xca\xb5\xd5\xe2\xbe\xcd\xb8\xfa\xd2\xbb\xb8\xf6\xd0\xd5\xd5\xc5\xb5\xc4\xbb\xb5\xc8\xcb\xa3\xac\xbe\xa1\xb9\xdc\xb0\xd1\xc3\xfb\xd7\xd6\xb8\xc4\xce\xaa\xc1\xcb\xa1\xb0\xd5\xc5\xba\xc3\xc8\xcb\xa1\xb1\xa3\xac\xb5\xab\xcb\xfb\xbb\xb9\xca\xc7\xd2\xbb\xb8\xf6\xbb\xb5\xc8\xcb\xca\xc7\xd2\xbb\xb8\xf6\xb5\xc0\xc0\xed\xb5\xc4^_^\r\n'b'\r\n'b'\xb9\xd8\xd3\xda\xce\xc4\xbc\xfe\xb5\xc4\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb3\xf5\xd1\xa7\xd5\xdf\xc8\xdd\xd2\xd7\xd7\xdf\xbd\xf8\xb5\xc4\xce\xf3\xc7\xf8\xa3\xba\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xd2\xbb\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb5\xc4\xb1\xd8\xd2\xaa\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\r\n'b'\r\n'b'\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xbf\xc9\xd2\xd4\xd3\xd0\xbb\xf2\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xa3\xac\xb6\xd4\xd3\xda\xb4\xf2\xbf\xaa\xce\xc4\xbc\xfe\xb2\xd9\xd7\xf7\xa3\xac\xc3\xbb\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xd0\xe8\xd2\xaa\xd1\xa1\xd4\xf1\xb3\xcc\xd0\xf2\xc8\xa5\xb4\xf2\xbf\xaa\xcb\xfc\xa3\xac\xd3\xd0\xc0\xa9\xd5\xb9\xc3\xfb\xb5\xc4\xce\xc4\xbc\xfe\xbb\xe1\xd7\xd4\xb6\xaf\xd3\xc3\xc9\xe8\xd6\xc3\xba\xc3\xb5\xc4\xb3\xcc\xd0\xf2\xa3\xa8\xc8\xe7\xd3\xd0\xa3\xa9\xc8\xa5\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa3\xa8\xca\xc7\xa1\xb0\xb3\xa2\xca\xd4\xb4\xf2\xbf\xaa\xa1\xb1\xa3\xac\xb6\xf8\xb2\xbb\xca\xc7\xa1\xb0\xb4\xf2\xbf\xaa\xa1\xb1\xb5\xc4\xd4\xad\xd2\xf2\xb2\xce\xbf\xb4\xcf\xc2\xc3\xe6\xb5\xc4\xb5\xda2\xb8\xf6\xce\xf3\xc7\xf8\xa3\xa9\xa3\xac\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xca\xc7\xd2\xbb\xb8\xf6\xb3\xa3\xb9\xe6\xce\xc4\xbc\xfe\xb5\xc4\xb9\xb9\xb3\xc9\xb2\xbf\xb7\xd6\xa3\xac\xb5\xab\xd2\xbb\xb8\xf6\xce\xc4\xbc\xfe\xb2\xa2\xb2\xbb\xd2\xbb\xb6\xa8\xd0\xe8\xd2\xaa\xd2\xbb\xb8\xf6\xc0\xa9\xd5\xb9\xc3\xfb\xa1\xa3\r\n'b'\r\n'b'\xce\xf3\xc7\xf8\xb6\xfe\xa3\xba\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xb1\xed\xc3\xf7\xc1\xcb\xb8\xc3\xce\xc4\xbc\xfe\xca\xc7\xba\xce\xd6\xd6\xc0\xe0\xd0\xcd\r\n'b'\r\n'b'\xce\xc4\xbc\xfe\xc0\xa9\xd5\xb9\xc3\xfb\xbf\xc9\xd2\xd4\xc8\xcb\xce\xaa\xc9\xe8\xb6\xa8\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaTXT\xb5\xc4\xce\xc4\xbc\xfe\xd3\xd0\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xd5\xc5\xcd\xbc\xc6\xac\xa3\xac\xcd\xac\xd1\xf9\xa3\xac\xc0\xa9\xd5\xb9\xc3\xfb\xce\xaaM-P3\xb5\xc4\xce\xc4\xbc\xfe\xa3\xac\xd2\xc0\xc8\xbb\xbf\xc9\xc4\xdc\xca\xc7\xd2\xbb\xb8\xf6\xca\xd3\xc6\xb5\xa1\xa3'

这个是因为你使用 'rb' 打开的文件
就是你用二进制打开的,可以看到输出的字符串最前面有一个字母 b
说明这个字符串是二进制形式的


f = open('OpenMe.mp3')
for each_line in f:
        print(each_line, end='')
f.close()
$ cat main.py
f = open('OpenMe.mp3')
for each_line in f:
        print(each_line, end='')
f.close()
$ python main.py
Traceback (most recent call last):
  File "/tmp/main.py", line 2, in <module>
    for each_line in f:
  File "/usr/lib/python3.10/codecs.py", line 322, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb3 in position 0: invalid start byte
$

这个我这边也报错
如果你在open的参数中不指定编码,默认就使用当前系统的编码,我这个系统使用的utf-8编码
而OpenMe.mp3这个文件的编码是gb18030,怎么知道的?我用vim打开这个文件,右下角显示这个文件的编码是gb18030
$ cat main.py
f = open('OpenMe.mp3', encoding='gb18030')
for each_line in f:
        print(each_line, end='')
f.close()
$ python main.py
长期使用Windows操作系统的朋友很容易被扩展名所误导,认为扩展名决定文件类型,其实这种观念是错误的!

其实这就跟一个姓张的坏人,尽管把名字改为了“张好人”,但他还是一个坏人是一个道理的^_^

关于文件的扩展名,初学者容易走进的误区:

误区一:文件扩展名是一个文件的必要构成部分

一个文件可以有或没有扩展名,对于打开文件操作,没有扩展名的文件需要选择程序去打开它,有扩展名的文件会自动用设置好的程序(如有)去尝试打开(是“尝试打开”,而不是“打开”的原因参看下面的第2个误区),文件扩展名是一个常规文件的构成部分,但一个文件并不一定需要一个扩展名。

误区二:文件扩展名表明了该文件是何种类型

文件扩展名可以人为设定,扩展名为TXT的文件有可能是一张图片,同样,扩展名为M-P3的文件,依然可能是一个视频。$

评分

参与人数 1荣誉 +5 鱼币 +5 贡献 +3 收起 理由
一隻太平洋睡鯊 + 5 + 5 + 3 先給評分,感謝回覆!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 09:58:32 | 显示全部楼层
Twilight6 发表于 2022-7-5 06:51
Python 的 open 函数打开的编码,和文件默认编码不一致,导致报错

所以你可以将 OpenMe.mp3 文件右 ...

用記事本開啟會亂碼,由於系統是繁體的樣子
就算我的系統改為選擇UTF-8作為編碼
不過我剛剛嘗試,直接把檔案名修改為txt
直接開啟會亂碼,但用google chrome可以正常開啟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:00:14 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 09:48
所以windows的繁體系統一般使用CP950(還是MS950? 好像兩個編碼都以950為基礎,所以沒有差很多,看別人測 ...

因为这个文件不是utf-8编码的,即使你修改系统的默认编码为utf-8也依然报错
这个文件的编码是gb18030

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:06:36 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 09:58
用記事本開啟會亂碼,由於系統是繁體的樣子
就算我的系統改為選擇UTF-8作為編碼
不過我剛剛嘗試,直接 ...

你应该把系统的编码改成gb18030

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:08:40 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 09:58
用記事本開啟會亂碼,由於系統是繁體的樣子
就算我的系統改為選擇UTF-8作為編碼
不過我剛剛嘗試,直接 ...

正常,因为google chrome可以识别文件的编码,就像我的vim,我用vim打开这个文件
显示正常,而且右下角显示文件的编码是gb18030

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 10:12:04 | 显示全部楼层
人造人 发表于 2022-7-5 09:57
这个是因为你使用 'rb' 打开的文件
就是你用二进制打开的,可以看到输出的字符串最前面有一个字 ...

確實,雖然我不知道我的系統是MS950還是CP950,但是我使用的編譯器VScode默認是使用UTF-8編碼
f = open('OpenMe.mp3', encoding='gb18030')

for each_line in f:
        print(each_line, end='')
f.close()
同樣能正確打開文件
不過我直接將文件名改成txt,然後用VScode開啟亂碼(預設是UTF-8)時
選擇編碼,VScode會顯示由內容推測使用GB2312
估計GB2312和gb18030是很類似的(就像MS950和CP950?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 10:13:27 | 显示全部楼层
人造人 发表于 2022-7-5 10:06
你应该把系统的编码改成gb18030

如果用GB2312或gb18030當作系統編碼
繁體txt文本會亂碼嗎?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:15:46 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 10:13
如果用GB2312或gb18030當作系統編碼
繁體txt文本會亂碼嗎?

不知道,你可以试一试看看是不是乱码,我没用过繁体系统

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 還是不了,估計會文件夾和文件的名子都亂碼.

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 10:16:06 | 显示全部楼层
人造人 发表于 2022-7-5 10:08
正常,因为google chrome可以识别文件的编码,就像我的vim,我用vim打开这个文件
显示正常,而且右下角 ...

用VIM編譯器,能夠知道自己的系統編碼嗎?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:17:28 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 10:12
確實,雖然我不知道我的系統是MS950還是CP950,但是我使用的編譯器VScode默認是使用UTF-8編碼

windows 中的大部分软件都是通过文件后缀识别文件的类型,你把txt文件改成mp3文件,大部分的软件就不干了

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:19:13 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 10:12
確實,雖然我不知道我的系統是MS950還是CP950,但是我使用的編譯器VScode默認是使用UTF-8編碼

GB2312,GBK,GB18030 这几种字符集的主要区别是什么
https://zhidao.baidu.com/question/745154723282624332.html

评分

参与人数 1鱼币 +1 收起 理由
一隻太平洋睡鯊 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-7-5 10:26:29 | 显示全部楼层
一隻太平洋睡鯊 发表于 2022-7-5 10:16
用VIM編譯器,能夠知道自己的系統編碼嗎?

我用的linux,当前系统的编码保存在环境变量LANG中
vim读取这个变量的内容就知道系统的编码了
你也可以写一个程序来读取这个变量
$ echo $LANG
en_US.UTF-8
$
$ cat main.c
#include <stdio.h>
#include <stdlib.h>

int main(void) {
    puts(getenv("LANG"));
    return 0;
}
$ gcc-debug -o main main.c
$ ./main
en_US.UTF-8
$

windows 的话,那就用鼠标点来点去的找吧,应该在设置里面
或者调用windows api应该可以获取系统的编码

评分

参与人数 1荣誉 +1 鱼币 +1 贡献 +1 收起 理由
一隻太平洋睡鯊 + 1 + 1 + 1 感謝回覆

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-7-5 10:45:40 | 显示全部楼层
人造人 发表于 2022-7-5 10:26
我用的linux,当前系统的编码保存在环境变量LANG中
vim读取这个变量的内容就知道系统的编码了
你也可以 ...


我找了,就寫950而已XDDD
Microsoft Windows [版本 10.0.19044.1766]
(c) Microsoft Corporation. 著作權所有,並保留一切權利。

C:\Users\dexck>chcp
使用中的字碼頁: 950

似乎因為950本身不是正式網際網路標準
所以CP950(代碼頁950)和MS950(windows預設的記事本文本編碼的樣子)
並沒有統一起來,很多人還認為其實就是同一個東西
我看網上有人測試,確實是有差異,不過那些生僻字大概平常都用不到
一般使用上應該是沒差的吧哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 18:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表