2009-08-28 42 views
122

Tôi đang sử dụng trăn 3.1, trên máy tính Windows 7. Nga là ngôn ngữ hệ thống mặc định và utf-8 là . mặc định mã hóa"Lỗi Unicode" unicodeescape "codec không thể giải mã byte ... Không thể mở tệp văn bản bằng Python 3

Nhìn vào câu trả lời cho một previous question, tôi đã cố gắng sử dụng "codec" mô-đun để cho tôi một chút may mắn Dưới đây là một vài ví dụ:.

>>> g = codecs.open("C:\Users\Eric\Desktop\beeline.txt", "r", encoding="utf-8") 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#39>, line 1) 
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8") 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#40>, line 1) 
>>> g = codecs.open("C:\Python31\Notes.txt", "r", encoding="utf-8") 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 11-12: malformed \N character escape (<pyshell#41>, line 1) 
>>> g = codecs.open("C:\Users\Eric\Desktop\Site.txt", "r", encoding="utf-8") 
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-4: truncated \UXXXXXXXX escape (<pyshell#44>, line 1) 

ý tưởng cuối cùng của tôi là, tôi nghĩ nó có thể là một thực tế rằng cửa sổ "dịch" một vài thư mục, chẳng hạn như "người dùng" thư mục, sang tiếng Nga (mặc dù gõ "người dùng" vẫn là con đường chính xác), vì vậy tôi đã thử nó trong Thư mục Python31. Tuy nhiên, không may mắn. Bất kỳ ý tưởng?

+0

Không liên quan đến câu hỏi của bạn, nhưng nó rất cao nên bạn không sử dụng Python 3.x tuy nhiên, trừ khi bạn có một lý do đặc biệt tốt, như chuyển một thư viện sang nó. – aehlke

+1

Wahnfrieden - tại sao? Không nhiều thư viện hỗ trợ, chắc chắn, nhưng khác hơn thế? – orip

+4

@Wahnfrieden Cái gì? Python 2 sẽ được loại bỏ trong tương lai, do đó, sử dụng Python 3 có ý nghĩa, mặc dù "thiếu" của "sự trưởng thành". –

Trả lời

260

Vấn đề là với chuỗi

"C:\Users\Eric\Desktop\beeline.txt" 

Ở đây, \U bắt đầu một Unicode thoát tám ký tự, chẳng hạn như '\ U00014321`. Trong mã của bạn, lối thoát được theo sau bởi ký tự ',' không hợp lệ.

Bạn cần phải sao chép tất cả các dấu gạch chéo ngược hoặc tiền tố chuỗi bằng r (để tạo chuỗi thô).

+19

Hahaha ... Thật là một cái bẫy dễ dàng rơi vào, như tôi vừa có. Câu trả lời tuyệt vời. –

+0

Tôi tìm thấy lỗi này trong một chuỗi chức năng trong khi chuyển mã 2.x thành python3. –

+3

Tôi đã gặp phải lỗi này khi tôi sử dụng dấu ngoặc kép '' '' 'các bình luận xung quanh một phần của mã có chứa một chuỗi thô với một' \ U' trong đó. I E. chuỗi đã không cho tôi một lỗi cho đến khi tôi cố gắng bình luận nó. Vì lý do này, phương pháp dấu gạch chéo ngược kép có thể được ưu tiên. –

2

Tôi đã gặp lỗi này ở trăn 3.2.

Tôi có kịch bản cho email gửi và:

csv.reader(open('work_dir\uslugi1.csv', newline='', encoding='utf-8')) 

khi tôi loại bỏ char đầu tiên trong tập tin uslugi1.csv hoạt động tốt.

+0

Điều này sẽ là một cách giải quyết nhưng câu trả lời đúng được liệt kê ở trên. – Johnny

3

Tham khảo tài liệu openpyxl, bạn có thể thực hiện các thay đổi như sau.

from openpyxl import Workbook 
from openpyxl.drawing.image import Image 

wb = Workbook() 
ws = wb.active 
ws['A1'] = 'Insert a xxx.PNG' 
# Reload an image 
img = Image(**r**'x:\xxx\xxx\xxx.png') 
# Insert to worksheet and anchor next to cells 
ws.add_image(img, 'A2') 
wb.save(**r**'x:\xxx\xxx.xlsx') 
+2

Vui lòng xem xét chỉnh sửa bài đăng của bạn để thêm giải thích thêm về mã của bạn và tại sao nó sẽ giải quyết vấn đề. Một câu trả lời mà hầu hết chỉ chứa mã (ngay cả khi nó hoạt động) thường không giúp OP hiểu được vấn đề của họ. – SuperBiasedMan

+0

Cảm ơn @Deepika Anand, các tác phẩm của nó, có thể giải thích bằng cách nào không? thx –

+1

Tham khảo tài liệu chính thức trên trang: https: //docs.python.org/2/howto/unicode.html. đặc biệt dòng "Trong mã nguồn Python, các ký tự Unicode được viết dưới dạng các chuỗi có ký tự 'u' hoặc 'U': u'abcdefghijk '. Các điểm mã cụ thể có thể được viết bằng chuỗi thoát \ u, tiếp theo là bốn chữ số thập phân cho điểm mã. Chuỗi thoát \ U là tương tự, nhưng dự kiến ​​8 chữ số thập phân, không phải là 4. " –

10

lỗi điển hình trên Windows vì thư mục người dùng mặc định là C:\user\<your_user>, vì vậy khi bạn muốn sử dụng con đường này như một tham số chuỗi vào một hàm Python, bạn nhận được một lỗi Unicode, chỉ vì \u là một lối thoát Unicode . Bất kỳ ký tự nào không phải là số sau khi điều này tạo ra lỗi.

Để giải quyết nó, chỉ cần tăng gấp đôi backslashes: C:\\\user\\\<\your_user>...

1

Hoặc bạn có thể thay thế '\' bằng '/' trong con đường.

+4

Tôi khuyên bạn nên [tham quan] và truy cập [trợ giúp]. Câu trả lời của bạn dường như không đáp ứng các tiêu chuẩn chất lượng của chúng tôi. Bạn cần phải xây dựng một chút lý do tại sao điều này sẽ làm việc, có thể tạo ra ví dụ mã hoàn chỉnh. – rene

+0

Chào mừng bạn đến với Stack Overflow! Vui lòng xem xét chỉnh sửa bài đăng của bạn để thêm giải thích thêm về mã của bạn và tại sao nó sẽ giải quyết vấn đề. Một câu trả lời mà hầu hết chỉ chứa mã (ngay cả khi nó hoạt động) thường không giúp OP hiểu được vấn đề của họ. – SuperBiasedMan

0

Tôi đã gặp lỗi tương tự, chỉ cần gỡ cài đặt và cài đặt lại gói gọn gàng, đã hoạt động!

3

Tiền tố với 'r' hoạt động rất tốt nhưng cần phải đúng cú pháp. Ví dụ:

passwordFile = open(r'''C:\Users\Bob\SecretPasswordFile.txt''') 

Không cần \\ [double-backslashes] tại đây - duy trì khả năng đọc và hoạt động tốt.

1

Với Python 3 Tôi có vấn đề này:

self.path = 'T:\PythonScripts\Projects\Utilities' 

sản xuất lỗi này:

self.path = 'T:\PythonScripts\Projects\Utilities' 
      ^
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in 
position 25-26: truncated \UXXXXXXXX escape 

việc sửa chữa mà làm việc là:

self.path = r'T:\PythonScripts\Projects\Utilities' 

Có vẻ như '\ U' đã tạo ra lỗi và ký tự 'r' trước chuỗi tắt tám ký tự Unicode (cho chuỗi thô) thất bại. (Đây là một chút của một quá đơn giản, nhưng nó hoạt động nếu bạn không quan tâm đến unicode)

Hy vọng điều này sẽ giúp người

Các vấn đề liên quan