2015-08-14 12 views
6

Vấn đề của tôi ChuỗiPython 2.7 - Tại sao python mã hóa một chuỗi khi .append() trong một danh sách?

# -*- coding: utf-8 -*- 
print ("################################") 
foo = "СТ142Н.0000" 
print (type(foo)) 
print("foo: "+foo) 
foo_l = [] 
foo_l.append(foo) 
print ("List: ") 
print (foo_l) 
print ("List decode: ") 
print([x.decode("UTF-8") for x in foo_l]) 
print("Pop: "+foo_l.pop()) 

kết quả In:

################################ 
<type 'str'> 
foo: СТ142Н.0000 
List: 
['\xd0\xa1\xd0\xa2142\xd0\x9d.0000'] 
List decode: 
[u'\u0421\u0422142\u041d.0000'] 
Pop: СТ142Н.0000 

này hoạt động tốt, tôi chỉ cần viết chuỗi "CT142H.0000" bằng tay tiping với bàn phím (cùng mã của nó)

print ("################################") 
foo = "CT142H.0000" 
print(type(foo)) 
print("foo: "+foo) 
foo_l = [] 
foo_l.append(foo) 
print ("List: ") 
print (foo_l) 
print ("List decode: ") 
print([x.decode("UTF-8") for x in foo_l]) 
print("Pop: "+foo_l.pop()) 

kết quả In:

################################ 
<type 'str'> 
foo: CT142H.0000 
List: 
['CT142H.0000'] 
List decode: 
[u'CT142H.0000'] 
Pop: CT142H.0000 

Tại sao python mã hóa chuỗi đầu tiên khi tôi thêm nó vào danh sách?

---------------------------------------------- -

Điều này hiện đang được giải quyết, tôi đã lo lắng về ký tự đó, tôi đặt "kết quả" trong JSON và sau đó trong một trang web, cuối cùng trong trang web nó hoạt động tốt!

---------------------------------------------- -

Tôi đã tìm thấy một giải pháp khác, nhưng không có giải pháp đúng, khiến bạn sẽ gặp sự cố trong một số trường hợp.

json.dumps(list, ensure_ascii=False) 

Cảm ơn tất cả!

Trả lời

11

Bởi vì mặc dù chúng trông giống như bình thường C/T/H ký tự, chúng thực sự không phải là các ký tự đó.

Chúng là Ký tự Cyrillic.

С - Cyrillic Capital letter ES
Т - Cyrillic Capital letter TE
Н - Cyrillic Capital letter EN

Bạn sẽ cần phải kiểm tra bất cứ nơi nào bạn có những ký tự từ, về việc tại sao họ là như vậy.

On lý do tại sao họ bị in sử dụng \x.. đại diện, là bởi vì khi bạn in một list, phương pháp __str__() trong danh sách được gọi, nhưng tự liệt kê gọi __repr__() trên các yếu tố của nó, và do đó bạn sẽ có được đại diện bên trong của chuỗi. Bạn sẽ nhận được kết quả tương tự nếu bạn làm -

print(repr(foo)) 

cho trường hợp đầu tiên.

+0

Tôi nhận được chuỗi từ trang web, xóa web. Tôi sẽ xem tại sao tôi có được điều đó. Cảm ơn câu trả lời của bạn, – Wonka

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