2011-07-14 15 views
5

Tôi đang cố gắng xây dựng một tiện ích trợ giúp đơn giản sẽ xem xét thông qua các dự án của tôi và tìm và trả lại các mở cho tôi qua dòng lệnh. Nhưng các cuộc gọi của tôi đến os.listdir trả về vô nghĩa (ví dụ: '\x82\xa9\x82\xcc\x96I') bất cứ khi nào thư mục hoặc tên tệp bằng tiếng Nhật và nói sai ngữ pháp không thể được chuyển vào cuộc gọi lần nữa để vào thư mục. nghĩa là os.listdir('C:\Documents and Settings\\x82\xa9\x82\xcc\x96I') trả về lỗi:Tôi có thể duyệt các thư mục có tên bằng tiếng Nhật bằng Python bằng cách nào?

'WindowsError: [Error 3] 指定されたパスが見つかりません。' 

Có ai biết cách tôi có thể giải quyết vấn đề này không? Cảm ơn rất nhiều.

+1

指定 さ れ た パ ス が 見 つ か り ま せ ん nghĩa "Không thể tìm thấy con đường quy định" – Mikaveli

+0

Cảm ơn bạn! Trên thực tế, đọc tiếng Nhật không phải là vấn đề đối với tôi, nhưng tôi đánh giá cao sự giúp đỡ! – StormShadow

Trả lời

6

Bạn có thể cần phải giải mã chuỗi thành Unicode, sau đó mã hóa lại mã đó thành UTF-8 trước khi chuyển đến os.listdir. Dường như chuỗi Nhật của bạn được mã hóa trong shift-JIS:

>>> '\x82\xa9\x82\xcc\x96I'.decode('shift-jis').encode('utf-8') 
'\xe3\x81\x8b\xe3\x81\xae\xe8\x9c\x82' 
>>> print '\x82\xa9\x82\xcc\x96I'.decode('shift-jis') 
かの蜂 

Ngoài ra, tận dụng các tính năng sau đây của os.listdir để có được chuỗi Unicode ra khỏi nó ở nơi đầu tiên:

On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects.

Vì vậy, :

os.listdir(ur'C:\Documents and Settings') 
# ---------^ 
+0

Bạn thật tuyệt vời. Cảm ơn bạn. – StormShadow

2

Bạn nên cố gắng chuyển vào tên thư mục dưới dạng Unicode-literal (u'your/path'). Bằng cách này, kết quả cũng là Unicode (có thể được yêu cầu để làm việc với các ký tự tiếng Nhật).

Từ documentation:.

On Windows NT/2k/XP and Unix, if path is a Unicode object, the result will be a list of Unicode objects. Undecodable filenames will still be returned as string objects.

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