สิ่งนี้มาจากไหน: - * - coding: utf-8 - * -


142

Python รับรู้สิ่งต่อไปนี้เป็นคำสั่งซึ่งกำหนดการเข้ารหัสของไฟล์:

# -*- coding: utf-8 -*-

ฉันเคยเห็นคำแนะนำประเภทนี้มาก่อน ( -*- var: value -*-) มันมาจากไหน? ข้อกำหนดทั้งหมดคืออะไรเช่นค่าสามารถรวมช่องว่างสัญลักษณ์พิเศษขึ้นบรรทัดใหม่หรือแม้แต่-*-ตัวมันเอง

โปรแกรมของฉันจะเขียนไฟล์ข้อความธรรมดาและฉันต้องการรวมข้อมูลเมตาบางส่วนไว้ในไฟล์โดยใช้รูปแบบนี้


4
สิ่งนี้ง่ายต่อการจดจำและใช้งานได้ใน PyCharm บรรณาธิการของฉัน # coding: utf-8
crizCraig

3
การใช้# coding: utf8งานนอกกรอบด้วย Python 2.7 แม้จะอยู่นอก PyCharm (ฉันใช้ SublimeText)
Basj


2
@Cbhihe คำถามนี้ไม่เกี่ยวกับ Python ไม่เกี่ยวกับคำสั่งทำอะไรหรือทำงานอย่างไร มีการถามว่าซอฟต์แวร์ pre-Python ตัวใดเป็นผู้คิดค้นและมีอะไรมากกว่าการเข้ารหัสไฟล์
hamstergene

คำตอบ:


91

วิธีการระบุการเข้ารหัสไฟล์งูใหญ่นี้มาจากPEP 0263 - กำหนดหลามรหัสที่มาเข้ารหัส

GNU Emacs ได้รับการยอมรับเช่นกัน (ดูการอ้างอิงภาษา Python, การถอดรหัสการเข้ารหัส 2.1.4 ) แม้ว่าฉันจะไม่รู้ว่าเป็นโปรแกรมแรกที่ใช้ไวยากรณ์นั้นหรือไม่


4
จากสิ่งที่ฉันสามารถสรุปได้จากคู่มือ Emacs ค่าสามารถเป็นนิพจน์ LISP ใดก็ได้โดยเฉพาะสตริงที่ยกมาสองครั้ง
hamstergene

ขอบคุณสำหรับลิงค์ pep เมื่อก่อนฉันรู้สึกว่าคำสั่งถูกใช้โดยโปรแกรมแก้ไขข้อความเท่านั้น จนถึงตอนนี้ฉันไม่เคยรู้มาก่อนเลยว่าตัวแปล python แยกวิเคราะห์ความคิดเห็นจริง ๆ หากมีอยู่ในสองบรรทัดแรกของไฟล์
umeboshi

24

# -*- coding: utf-8 -*-เป็น Python 2 ใน Python 3+ การเข้ารหัสเริ่มต้นของไฟล์ต้นฉบับคือ UTF-8 อยู่แล้วและบรรทัดนั้นก็ไร้ประโยชน์

ดู: ฉันควรใช้การประกาศการเข้ารหัสใน Python 3 หรือไม่

pyupgradeเป็นเครื่องมือที่คุณสามารถทำงานในรหัสของคุณในการลบความคิดเห็นเหล่านั้นและที่เหลือไม่มีอีกต่อไปมีประโยชน์อื่น ๆ จากงูหลาม 2 objectเหมือนมีชั้นเรียนทั้งหมดของคุณได้รับมรดกจาก


8

สิ่งนี้เรียกว่าตัวแปรโลคัลไฟล์ซึ่ง Emacs เข้าใจและตั้งค่าตามลำดับ ดูส่วนที่เกี่ยวข้องในคู่มือ Emacs - คุณสามารถกำหนดได้ทั้งในส่วนหัวหรือส่วนท้ายของไฟล์


ตัวแปรโลคัลไฟล์เฉพาะประเภทนี้ยังเข้าใจโดยตัวแปล Python เองไม่ใช่แค่สำหรับโปรแกรมแก้ไขข้อความ stackoverflow.com/questions/41680533/…
Boris

4

ใน PyCharm ฉันจะทิ้งมันไป จะปิดไฟแสดงสถานะ UTF-8 ที่ด้านล่างพร้อมคำเตือนว่าการเข้ารหัสเป็นแบบฮาร์ดโค้ด อย่าคิดว่าคุณต้องการความคิดเห็นของ PyCharm ที่กล่าวถึงข้างต้น


ที่จริงถ้าฉันใส่บรรทัดเหมือนtest1 = 'äöü'จะบอกใบ้ให้คุณเพิ่ม headder ลงในไฟล์ (pycharm 2019.1)
Cutton Eye

@Cutton Eye คือ Python 2 หรือ 3?
Boris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.