Tôi đang có cột loại NVARCHAR
trong cơ sở dữ liệu của mình. Tôi không thể chuyển đổi nội dung của cột này thành chuỗi đơn giản trong mã của tôi. (Tôi đang sử dụng pyodbc
để kết nối cơ sở dữ liệu).Sự cố mã hóa/giải mã chuỗi - ký tự bị thiếu từ cuối
# This unicode string is returned by the database
>>> my_string = u'\u4157\u4347\u6e65\u6574\u2d72\u3430\u3931\u3530\u3731\u3539\u3533\u3631\u3630\u3530\u3330\u322d\u3130\u3036\u3036\u3135\u3432\u3538\u2d37\u3134\u3039\u352d'
# prints something in chineese
>>> print my_string
䅗䍇湥整㐰㤱㔰㜱㔹㔳㘱㘰㔰㌰㈭〶〶ㄵ㐲㔸ⴷㄴ〹㔭
Gần nhất tôi đã đi là thông qua mã hóa nó để utf-16
như:
>>> my_string.encode('utf-16')
'\xff\xfeWAGCenter-04190517953516060503-20160605124857-4190-5'
>>> print my_string.encode('utf-16')
��WAGCenter-04190517953516060503-20160605124857-4190-5
Nhưng giá trị thực tế mà tôi cần theo các cửa hàng giá trị trong cơ sở dữ liệu là:
WAGCenter-04190517953516060503-20160605124857-4190-51
Tôi đã thử mã hóa nó thành utf-8
, utf-16
, ascii
, utf-32
nhưng không có gì có vẻ hiệu quả.
Có ai có ý tưởng về những gì tôi bị thiếu không? Và cách lấy kết quả mong muốn từ my_string
.
Sửa: On chuyển đổi nó để utf-16-le
, tôi có thể để loại bỏ ký tự không mong muốn từ đầu, nhưng vẫn là một nhân vật là mất tích từ cuối
>>> print t.encode('utf-16-le')
WAGCenter-04190517953516060503-20160605124857-4190-5
Mở cố gắng cho một số cột khác, nó đang làm việc. Điều gì có thể là nguyên nhân gây ra sự cố gián đoạn này?
Bạn đang nhìn thấy một dấu thứ tự byte (BOM) – brianpck
@brianpck Dấu ngoặc đơn lúc bắt đầu + thiếu 1 ở cuối. Tôi đang điều tra về * Dấu đơn hàng Byte * ngay bây giờ. Bất kỳ ý tưởng tại sao '1' bị thiếu trong lần cuối? – user7001260
Các ký tự trong 'my_string' * là * các điểm mã cjk sao cho không thể là những gì thực sự được trả về từ trường' nvarchar'? Nếu có thể luôn luôn có thể đọc nó như là một 'varchar' với một diễn viên' chọn cast (trường như varchar (xxx)) ... ' –