Unicode (UTF-8) การอ่านและการเขียนไฟล์ใน Python


329

ฉันมีอาการสมองล้มเหลวในการทำความเข้าใจการอ่านและการเขียนข้อความไปยังไฟล์ (Python 2.4)

# The string, which has an a-acute in it.
ss = u'Capit\xe1n'
ss8 = ss.encode('utf8')
repr(ss), repr(ss8)

("u'Capit \ xe1n '", "' Capit \ xc3 \ xa1n '")

print ss, ss8
print >> open('f1','w'), ss8

>>> file('f1').read()
'Capit\xc3\xa1n\n'

ดังนั้นฉันพิมพ์Capit\xc3\xa1nลงในโปรแกรมแก้ไขรายการโปรดของฉันในไฟล์ f2

แล้ว:

>>> open('f1').read()
'Capit\xc3\xa1n\n'
>>> open('f2').read()
'Capit\\xc3\\xa1n\n'
>>> open('f1').read().decode('utf8')
u'Capit\xe1n\n'
>>> open('f2').read().decode('utf8')
u'Capit\\xc3\\xa1n\n'

ฉันไม่เข้าใจอะไรที่นี่ เห็นได้ชัดว่ามีเวทมนต์บางส่วนที่สำคัญที่ฉันขาดหายไป หนึ่งประเภทใดในไฟล์ข้อความเพื่อรับการแปลงที่เหมาะสม

สิ่งที่ฉันล้มเหลวในการติดตามที่นี่คือสิ่งที่จุดประสงค์ของการเป็นตัวแทน UTF-8 คือถ้าคุณไม่สามารถทำให้ Python จดจำมันได้เมื่อมันมาจากภายนอก บางทีฉันควร JSON ทิ้งสตริงและใช้แทนเพราะมีตัวแทน asciiable! ประเด็นก็คือมีการแสดง ASCII ของวัตถุ Unicode นี้ที่ Python จะรับรู้และถอดรหัสเมื่อเข้ามาจากไฟล์? ถ้าเป็นเช่นนั้นฉันจะได้รับมันได้อย่างไร

>>> print simplejson.dumps(ss)
'"Capit\u00e1n"'
>>> print >> file('f3','w'), simplejson.dumps(ss)
>>> simplejson.load(open('f3'))
u'Capit\xe1n'

คำตอบ:


110

ในสัญกรณ์

u'Capit\xe1n\n'

"\ xe1" หมายถึงเพียงหนึ่งไบต์ "\ x" บอกคุณว่า "e1" เป็นเลขฐานสิบหก เมื่อคุณเขียน

Capit\xc3\xa1n

ลงในไฟล์ของคุณคุณมี "\ xc3" อยู่ในนั้น นั่นคือ 4 ไบต์และในรหัสของคุณคุณอ่านได้ทั้งหมด คุณสามารถเห็นสิ่งนี้เมื่อคุณแสดง:

>>> open('f2').read()
'Capit\\xc3\\xa1n\n'

คุณสามารถเห็นได้ว่าแบ็กสแลชนั้นหนีโดยแบ็กสแลช ดังนั้นคุณมีสี่ไบต์ในสตริงของคุณ: "\", "x", "c" และ "3"

แก้ไข:

ตามที่คนอื่น ๆ ชี้ให้เห็นในคำตอบของพวกเขาคุณควรป้อนตัวอักษรในตัวแก้ไขและตัวแก้ไขของคุณควรจัดการกับการแปลงเป็น UTF-8 และบันทึก

หากคุณมีสตริงในรูปแบบนี้คุณสามารถใช้string_escapeตัวแปลงสัญญาณเพื่อถอดรหัสเป็นสตริงปกติ:

In [15]: print 'Capit\\xc3\\xa1n\n'.decode('string_escape')
Capitán

ผลลัพธ์คือสตริงที่เข้ารหัสใน UTF-8 โดยที่อักขระเน้นเสียงถูกแทนด้วยสองไบต์ที่เขียน\\xc3\\xa1ในสตริงต้นฉบับ หากคุณต้องการมีสตริงยูนิโค้ดคุณต้องถอดรหัสอีกครั้งด้วย UTF-8

หากต้องการแก้ไข: คุณไม่มี UTF-8 ในไฟล์ของคุณ ในการดูว่ามันจะเป็นอย่างไร:

s = u'Capit\xe1n\n'
sutf8 = s.encode('UTF-8')
open('utf-8.out', 'w').write(sutf8)

เปรียบเทียบเนื้อหาของไฟล์utf-8.outกับเนื้อหาของไฟล์ที่คุณบันทึกด้วยโปรแกรมแก้ไข


ดังนั้นจุดของรูปแบบที่เข้ารหัส utf-8 คืออะไรถ้าไพ ธ อนสามารถอ่านไฟล์ที่ใช้งานได้ กล่าวอีกนัยหนึ่งมีตัวแทน ASCII ที่ไพ ธ อนจะอ่านเป็น \ xc3 เป็น 1 ไบต์หรือไม่
Gregg Lind

4
คำตอบของคุณ "ดังนั้นประเด็นคืออะไร ... " คำถามคือ "Mu." (เนื่องจาก Python สามารถอ่านไฟล์ที่เข้ารหัสใน UTF-8) สำหรับคำถามที่สองของคุณ: \ xc3 ไม่ได้เป็นส่วนหนึ่งของชุด ASCII บางทีคุณอาจหมายถึง "การเข้ารหัส 8 บิต" แทน คุณสับสนเกี่ยวกับ Unicode และการเข้ารหัส ไม่เป็นไรหลายคน
tzot

8
ลองอ่านสิ่งนี้ในฐานะไพรเมอร์: joelonsoftware.com/articles/Unicode.html
tzot

หมายเหตุ: u'\xe1'เป็นรหัส codepoint แบบ Unicode หนึ่งรายการU+00e1ที่สามารถแสดงได้โดยใช้ 1 ไบต์หรือมากกว่านั้นขึ้นอยู่กับการเข้ารหัสอักขระ (เป็น 2 ไบต์ใน utf-8) b'\xe1'เป็นหนึ่งไบต์ (หมายเลข 225) สิ่งที่ตัวอักษรใด ๆ ถ้ามันสามารถเป็นตัวแทนขึ้นอยู่กับการเข้ารหัสอักขระที่ใช้ในการถอดรหัสได้เช่นมันเป็นб( U+0431)ใน cp1251, с( U+0441)ใน cp866 ฯลฯ
jfs

11
มันวิเศษมากที่ผู้เขียนโค้ดชาวอังกฤษหลายคนพูดว่า "เพียงแค่ใช้ ascii" จากนั้นก็ล้มเหลวที่จะรู้ว่าเครื่องหมายปอนด์ไม่ใช่ ส่วนใหญ่ไม่ทราบว่า ascii! = หน้ารหัสท้องถิ่น (เช่น latin1)
Danny Staple

712

แทนที่จะยุ่งกับวิธีการเข้ารหัสและถอดรหัสฉันพบว่าง่ายต่อการระบุการเข้ารหัสเมื่อเปิดไฟล์ ioโมดูล (เพิ่มในหลาม 2.6) ให้io.openฟังก์ชั่นซึ่งมีพารามิเตอร์การเข้ารหัส

ใช้วิธีการเปิดจากioโมดูล

>>>import io
>>>f = io.open("test", mode="r", encoding="utf-8")

จากนั้นหลังจากเรียกฟังก์ชั่น read () ของ f วัตถุ Unicode ที่เข้ารหัสจะถูกส่งคืน

>>>f.read()
u'Capit\xe1l\n\n'

โปรดทราบว่าใน Python 3 io.openฟังก์ชั่นเป็นนามแฝงสำหรับopenฟังก์ชั่นในตัว ฟังก์ชันเปิดในตัวรองรับอาร์กิวเมนต์การเข้ารหัสใน Python 3 เท่านั้นไม่ใช่ Python 2

แก้ไข: ก่อนหน้านี้คำตอบนี้แนะนำโมดูลตัวแปลงสัญญาณ โมดูลตัวแปลงสัญญาณที่สามารถทำให้เกิดปัญหาเมื่อผสมread()และreadline()เพื่อให้คำตอบในตอนนี้แนะนำioโมดูลแทน

ใช้วิธีการเปิดจากโมดูลตัวแปลงสัญญาณ

>>>import codecs
>>>f = codecs.open("test", "r", "utf-8")

จากนั้นหลังจากเรียกฟังก์ชั่น read () ของ f วัตถุ Unicode ที่เข้ารหัสจะถูกส่งคืน

>>>f.read()
u'Capit\xe1l\n\n'

หากคุณรู้ว่าการเข้ารหัสไฟล์การใช้แพ็คเกจตัวแปลงสัญญาณจะทำให้เกิดความสับสนน้อยลง

ดูhttp://docs.python.org/library/codecs.html#codecs.open


74
ทำงานอย่างสมบูรณ์แบบสำหรับการเขียนไฟล์เกินไปแทนการopen(file,'w')ไม่codecs.open(file,'w','utf-8')แก้ไข
แมตต์คอนเนลลี่

1
นี่คือคำตอบที่ผมกำลังมองหา :)
จัสติน

6
codecs.open(...)วิธีนี้ยังสอดคล้องกับwith open(...):สไตล์อย่างสมบูรณ์หรือไม่โดยที่การwithใส่ใจกับการปิดไฟล์หลังจากทำเสร็จทั้งหมดแล้ว? ดูเหมือนว่าจะทำงานอยู่แล้ว
ลองจับได้ในที่สุด

2
@ ลองจับในที่สุดใช่ ฉันใช้with codecs.open(...) as f:ตลอดเวลา
Tim Swast

6
ฉันหวังว่าฉันจะสามารถลงคะแนนได้ร้อยครั้ง หลังจากทนทุกข์ทรมานกับปัญหาการเข้ารหัสหลายวันที่เกิดจากข้อมูลที่หลากหลายและการอ่านแบบไขว้เกี่ยวกับการเข้ารหัสคำตอบนี้เหมือนน้ำในทะเลทราย หวังว่าฉันจะเห็นมันเร็ว
Mike Girard

45

ตอนนี้สิ่งที่คุณต้องการใน Python3 ก็คือ open(Filename, 'r', encoding='utf-8')

[แก้ไขเมื่อวันที่ 2016-02-10 เพื่อขอความกระจ่าง]

Python3 เพิ่มพารามิเตอร์การเข้ารหัสลงในฟังก์ชั่นเปิด ข้อมูลต่อไปนี้เกี่ยวกับฟังก์ชั่นเปิดถูกรวบรวมจากที่นี่: https://docs.python.org/3/library/functions.html#open

open(file, mode='r', buffering=-1, 
      encoding=None, errors=None, newline=None, 
      closefd=True, opener=None)

การเข้ารหัสคือชื่อของการเข้ารหัสที่ใช้ในการถอดรหัสหรือเข้ารหัสไฟล์ สิ่งนี้ควรใช้ในโหมดข้อความเท่านั้น การเข้ารหัสที่เป็นค่าเริ่มต้นขึ้นอยู่กับแพลตฟอร์ม (สิ่งที่locale.getpreferredencoding () ส่งคืน) แต่การเข้ารหัสข้อความใด ๆ ที่สนับสนุนโดย Python สามารถใช้ได้ ดูโมดูลตัวแปลงสัญญาณสำหรับรายการการเข้ารหัสที่รองรับ

ดังนั้นการเพิ่มencoding='utf-8'เป็นพารามิเตอร์ในฟังก์ชั่นเปิดการอ่านและการเขียนไฟล์จึงเสร็จสิ้นเป็น utf8 (ซึ่งตอนนี้ก็เป็นการเข้ารหัสเริ่มต้นของทุกสิ่งที่ทำใน Python)


คุณช่วยอธิบายรายละเอียดเพิ่มเติมเกี่ยวกับโซลูชันที่คุณให้ได้ไหม
abarisone

2
ดูเหมือนว่ามีให้ใน python 2 โดยใช้โมดูลตัวแปลงสัญญาณ - codecs.open('somefile', encoding='utf-8') stackoverflow.com/a/147756/149428
Taylor Edmiston

18

ดังนั้นฉันจึงพบวิธีแก้ปัญหาสำหรับสิ่งที่ฉันกำลังมองหาซึ่งก็คือ:

print open('f2').read().decode('string-escape').decode("utf-8")

มีตัวแปลงสัญญาณบางตัวที่ผิดปกติซึ่งมีประโยชน์อยู่ที่นี่ การอ่านแบบพิเศษนี้ช่วยให้ผู้ใช้สามารถรับรอง UTF-8 ได้จากภายใน Python คัดลอกลงในไฟล์ ASCII และให้พวกเขาอ่านไปยัง Unicode ภายใต้การถอดรหัส "string-escape" เครื่องหมายทับจะไม่เพิ่มเป็นสองเท่า

สิ่งนี้ช่วยให้การเดินทางไปกลับที่ฉันจินตนาการได้


1
การตอบสนองที่ดีที่ฉันได้รับการทดสอบทั้งการแก้ปัญหา(codecs.open(file,"r","utf-8")และก็open(file,"r").read().decode("utf-8")ทั้งทำงานอย่างสมบูรณ์
Eagle

ฉันได้รับ "TypeError: คาดว่า str, ไบต์หรือ os.PathLike วัตถุไม่ใช่ _io.TextIOWrapper" ความคิดใด ๆ
JinSnow

ผมคิดว่าเมื่อพิจารณาจากจำนวน upvotes มันจะเป็นความคิดที่ดีที่จะยอมรับคำตอบที่สอง :)
Jacquot

14
# -*- encoding: utf-8 -*-

# converting a unknown formatting file in utf-8

import codecs
import commands

file_location = "jumper.sub"
file_encoding = commands.getoutput('file -b --mime-encoding %s' % file_location)

file_stream = codecs.open(file_location, 'r', file_encoding)
file_output = codecs.open(file_location+"b", 'w', 'utf-8')

for l in file_stream:
    file_output.write(l)

file_stream.close()
file_output.close()

14

ที่จริงแล้วสิ่งนี้ใช้ได้กับฉันสำหรับการอ่านไฟล์ด้วยการเข้ารหัส UTF-8 ใน Python 3.2:

import codecs
f = codecs.open('file_name.txt', 'r', 'UTF-8')
for line in f:
    print(line)

6

หากต้องการอ่านในสตริง Unicode แล้วส่งไปที่ HTML ฉันทำสิ่งนี้:

fileline.decode("utf-8").encode('ascii', 'xmlcharrefreplace')

มีประโยชน์สำหรับเซิร์ฟเวอร์ HTTP ที่ทำงานด้วยหลาม


6

คุณพบปัญหาทั่วไปเกี่ยวกับการเข้ารหัส: ฉันจะทราบได้อย่างไรว่าการเข้ารหัสไฟล์คืออะไร

คำตอบ: คุณไม่สามารถทำได้เว้นแต่รูปแบบไฟล์จะมีให้สำหรับสิ่งนี้ ตัวอย่างเช่น XML เริ่มต้นด้วย:

<?xml encoding="utf-8"?>

ส่วนหัวนี้ถูกเลือกอย่างระมัดระวังเพื่อให้สามารถอ่านได้ไม่ว่าจะเข้ารหัส ในกรณีของคุณไม่มีคำใบ้ดังกล่าวดังนั้นทั้งผู้แก้ไขและ Python ของคุณก็ไม่ทราบว่าเกิดอะไรขึ้น ดังนั้นคุณต้องใช้codecsโมดูลและใช้codecs.open(path,mode,encoding)ซึ่งให้บิตที่ขาดหายไปใน Python

สำหรับบรรณาธิการของคุณคุณต้องตรวจสอบว่ามันมีวิธีการตั้งค่าการเข้ารหัสไฟล์หรือไม่

จุดสำคัญของ UTF-8 คือสามารถเข้ารหัสอักขระ 21 บิต (Unicode) เป็นสตรีมข้อมูล 8 บิต (เพราะนั่นเป็นสิ่งเดียวที่คอมพิวเตอร์ทุกเครื่องในโลกสามารถจัดการได้) แต่เนื่องจากระบบปฏิบัติการส่วนใหญ่ลงวันที่ก่อน Unicode พวกเขาไม่ได้มีเครื่องมือที่เหมาะสมในการแนบข้อมูลการเข้ารหัสไปยังไฟล์บนฮาร์ดดิสก์

ปัญหาต่อไปคือการนำเสนอใน Python นี่คือคำอธิบายที่ดีเลิศในการแสดงความคิดเห็นโดย heikogerlach คุณต้องเข้าใจว่าคอนโซลของคุณสามารถแสดง ASCII ได้เท่านั้น ในการแสดง Unicode หรืออะไรก็ตาม> = charcode 128 จะต้องใช้วิธีการหลบหนี ในโปรแกรมแก้ไขของคุณคุณต้องไม่พิมพ์สตริงการแสดงผลที่หลบหนี แต่ความหมายของสตริง (ในกรณีนี้คุณต้องป้อนเครื่องหมาย umlaut และบันทึกไฟล์)

ที่กล่าวว่าคุณสามารถใช้ฟังก์ชัน Python eval () เพื่อเปลี่ยนสตริงที่ใช้ Escape เป็นสตริง:

>>> x = eval("'Capit\\xc3\\xa1n\\n'")
>>> x
'Capit\xc3\xa1n\n'
>>> x[5]
'\xc3'
>>> len(x[5])
1

อย่างที่คุณเห็นสตริง "\ xc3" กลายเป็นอักขระตัวเดียว นี่คือสตริง 8 บิตที่เข้ารหัส UTF-8 วิธีรับ Unicode:

>>> x.decode('utf-8')
u'Capit\xe1n\n'

Gregg Lindถาม: ฉันคิดว่ามีบางชิ้นหายไปที่นี่: ไฟล์ f2 ประกอบด้วย: hex:

0000000: 4361 7069 745c 7863 335c 7861 316e  Capit\xc3\xa1n

codecs.open('f2','rb', 'utf-8')ตัวอย่างเช่นอ่านพวกเขาทั้งหมดในตัวแยกที่แยกต่างหาก (คาดว่า) มีวิธีการเขียนไปยังไฟล์ใน ASCII ที่จะใช้งานได้หรือไม่?

คำตอบ: ขึ้นอยู่กับว่าคุณหมายถึงอะไร ASCII ไม่สามารถแสดงตัวอักษร> 127 ดังนั้นคุณต้องมีวิธีที่จะพูดว่า "ตัวละครไม่กี่ตัวต่อไปหมายถึงสิ่งที่พิเศษ" ซึ่งเป็นสิ่งที่ลำดับ "\ x" มันบอกว่า: ตัวละครสองตัวถัดไปเป็นรหัสของตัวละครเดียว "\ u" ทำเช่นเดียวกันโดยใช้อักขระสี่ตัวเพื่อเข้ารหัส Unicode สูงสุด 0xFFFF (65535)

ดังนั้นคุณไม่สามารถเขียน Unicode ไปยัง ASCII ได้โดยตรง (เนื่องจาก ASCII ไม่มีอักขระเดียวกัน) คุณสามารถเขียนมันเป็นสตริงหนี (เช่นใน f2); ในกรณีนี้ไฟล์สามารถแสดงเป็น ASCII หรือคุณสามารถเขียนเป็น UTF-8 ซึ่งในกรณีนี้คุณต้องมีสตรีมที่ปลอดภัย 8 บิต

วิธีการแก้ปัญหาของคุณโดยใช้decode('string-escape')ทำงาน แต่คุณจะต้องตระหนักถึงหน่วยความจำเท่าใดคุณใช้: codecs.open()สามเท่าของปริมาณการใช้

โปรดจำไว้ว่าไฟล์เป็นเพียงลำดับของไบต์ที่มี 8 บิต ทั้งบิตและไบต์ไม่มีความหมาย คุณคือคนที่บอกว่า "65 หมายถึง" A "" เนื่องจาก\xc3\xa1ควรกลายเป็น "à" แต่คอมพิวเตอร์ไม่มีหนทางที่จะรู้คุณต้องบอกด้วยการระบุการเข้ารหัสที่ใช้เมื่อทำการเขียนไฟล์


ฉันคิดว่ามีบางสิ่งที่ขาดหายไปที่นี่: ไฟล์ f2 ประกอบด้วย: hex: 0000000: 4361 7069 745c 7863 335c 7861 316e 0a Capit \ xc3 \ xa1n ตัวอย่างเช่น codecs.open ('f2', 'rb', 'utf-8') อ่านพวกมันทั้งหมดในตัวอักษรที่แยกกัน (คาดว่า) มีวิธีใดที่จะเขียนไปยังไฟล์ใน ascii ที่จะใช้งานได้หรือไม่?
Gregg Lind

6

ยกเว้นcodecs.open()หนึ่งสามารถใช้io.open()ทำงานกับ Python2 หรือ Python3 เพื่ออ่าน / เขียนไฟล์ Unicode

ตัวอย่าง

import io

text = u'á'
encoding = 'utf8'

with io.open('data.txt', 'w', encoding=encoding, newline='\n') as fout:
    fout.write(text)

with io.open('data.txt', 'r', encoding=encoding, newline='\n') as fin:
    text2 = fin.read()

assert text == text2


ใช่ใช้ io ดีกว่า แต่ผมเขียนด้วยกับคำสั่งเช่นนี้และมีข้อผิดพลาด:with io.open('data.txt', 'w', 'utf-8') as file: TypeError: an integer is requiredหลังจากที่ฉันเปลี่ยนเป็นwith io.open('data.txt', 'w', encoding='utf-8') as file:และมันใช้งานได้
Evan Hu

5

ดีแก้ไขข้อความที่คุณชื่นชอบไม่ได้ตระหนักว่า\xc3\xa1ควรจะเป็นตัวอักษรตัวอักษร แต่มันตีความพวกเขาเป็นข้อความ นั่นเป็นเหตุผลที่คุณได้รับแบ็กสแลชสองครั้งในบรรทัดสุดท้ายตอนนี้เป็นแบ็กสแลชจริง + xc3ฯลฯ ในไฟล์ของคุณ

หากคุณต้องการอ่านและเขียนไฟล์ที่เข้ารหัสใน Python ให้ใช้โมดูลตัวแปลงสัญญาณที่ดีที่สุด

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

>>> s = file("f1").read()
>>> print unicode(s, "Latin-1")
Capitán

จากนั้นวางสตริงนี้ลงในตัวแก้ไขของคุณและตรวจสอบให้แน่ใจว่ามันเก็บไว้โดยใช้ Latin-1 ภายใต้สมมติฐานว่าคลิปบอร์ดไม่สามารถอ่านสตริงได้การปัดเศษควรทำงาน


4

ลำดับ \ x .. เป็นสิ่งที่เฉพาะเจาะจงกับ Python มันไม่ใช่ลำดับการหลีกเลี่ยงไบต์สากล

วิธีที่คุณป้อนในการเข้ารหัสที่ไม่ใช่ ASCII แบบ UTF-8 นั้นขึ้นอยู่กับระบบปฏิบัติการและ / หรือตัวแก้ไขของคุณ นี่คือวิธีที่คุณทำมันได้ใน Windows สำหรับ OS X เพื่อป้อนaด้วยสำเนียงเฉียบพลันคุณสามารถกดoption+ E, จากนั้นA, และโปรแกรมแก้ไขข้อความเกือบทั้งหมดใน OS X รองรับ UTF-8


3

คุณยังสามารถปรับปรุงopen()ฟังก์ชั่นดั้งเดิมให้ทำงานกับไฟล์ Unicode ได้โดยแทนที่มันโดยใช้partialฟังก์ชั่น ความสวยงามของโซลูชันนี้คือคุณไม่จำเป็นต้องเปลี่ยนรหัสเดิม มันโปร่งใส

import codecs
import functools
open = functools.partial(codecs.open, encoding='utf-8')

1

ฉันพยายามแยกวิเคราะห์iCalโดยใช้ Python 2.7.9:

จากปฏิทินนำเข้า icalendar

แต่ฉันได้รับ:

 Traceback (most recent call last):
 File "ical.py", line 92, in parse
    print "{}".format(e[attr])
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe1' in position 7: ordinal not in range(128)

และได้รับการแก้ไขด้วยเพียงแค่:

print "{}".format(e[attr].encode("utf-8"))

(ตอนนี้สามารถพิมพ์likéáböss)


0

ฉันพบวิธีที่ง่ายที่สุดโดยเปลี่ยนการเข้ารหัสเริ่มต้นของสคริปต์ทั้งหมดเป็น 'UTF-8':

import sys
reload(sys)
sys.setdefaultencoding('utf8')

ใด ๆopen, printหรือคำสั่งอื่น ๆ utf8ก็จะใช้

Python 2.7.9การทำงานอย่างน้อยสำหรับ

ขอบคุณไปที่https://markhneedham.com/blog/2015/05/21/python-unicodeencodeerror-ascii-codec-cant-encode-character-uxfc-in-position-11-ordinal-not-in-range128/ ( มองไปที่ท้าย)

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