2008-10-28 7 views
5

Khách hàng của tôi có cơ sở dữ liệu MS SQL 2000 cũ sử dụng các trường varchar (50) để lưu trữ tên. Ông đã cố gắng sử dụng cơ sở dữ liệu này để nắm bắt một số dữ liệu (thông qua một biểu mẫu web). Một số chất độn hình thức là từ các nước khác, và các lĩnh vực varchar đã hấp dẫn khi một số trong những folks nhập tên của họ. Có thể khôi phục dữ liệu bằng cách nào đó không? Có lẽ bằng cách đoán những gì nhân vật nên được dựa trên những gì nó được giải quyết trong ASCII/varchar và đất nước người đó đến từ đâu? Một số dữ liệu:Tôi có thể khôi phục các ký tự quốc tế được lưu trữ nhầm trong trường varchar không?

Tên/quốc gia/họ hoặc tên?
Jia ™ Ã/CZE/F
Torbjörn/FIN/F
Huszár/HUN/L
Jürgen/DEU/F
Müller/CHE/L
Bumbálková/CZE/L
Doležal/CZE/L
Loïc/DEU/L

Bằng cách này, các mẫu web quy định này content-type:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 

Trả lời

6

Làm việc từ ví dụ thứ 5.

là ascii # 195 (C3). ¼ là ascii # 188 (BC).

Tôi đoán rằng MÃller có nghĩa là Müller.

Nếu đây là UTF-8, dựa trên http://en.wikipedia.org/wiki/UTF-8#Description

Chúng tôi đã có C3 BC = 1100 0011 1011 1100

Áp dụng các bản đồ UTF-8:

(110) 00011 (10) 11 1100

00FC là Unicode ü

U + 00FC (xem http://en.wikipedia.org/wiki/Latin_characters_in_Unicode)

Dường như với tôi rằng bạn có thể làm việc thông qua này lập trình.

Bây giờ giải quyết ví dụ đầu tiên:

Jia ™ ã thực sự là Jia ™ Ã (Nhân vật cuối cùng không được hiển thị).

Lờ đi Ji, đó là chính xác,

C5 99 c3 AD

(110) 0 0101 (10) 01 1001 (110) 0 0011 (10) 10 1101

0159 00ED

ří

Vì vậy, tên là: Jiří. Wikipedia nói rằng r đặc biệt là tiếng Séc và tôi cũng vậy. Hơn nữa nếu tôi google Jiří (http://www.google.com/search?q=Ji%C5%99%C3%AD&ie=utf-8&oe=utf-8) tôi nhận được rất nhiều lượt truy cập. Chúng ta đang chiến thắng ở đây.

Ví dụ thứ hai, Torbjörn, ánh xạ độc đáo với Torbjörn có vẻ thuyết phục.

IMHO không cần thiết phải kiểm tra con người về những thứ này, chúng dường như chỉ hoạt động.

+0

Về "Jiå ™ã": Tên thực tế sẽ được dán bên dưới. Vì một lý do nào đó, As có vai trò thấp hơn (họ ban đầu là chữ hoa) và nhân vật cuối cùng bị cắt ngắn. JiÅ ™ à – Chris

+0

Cảm ơn. Tôi đã cập nhật giải pháp ngay bây giờ. Tôi chỉ bắt tay với unicode. Bây giờ, quay lại làm việc :) –

+0

Yup, utf-8. Đã thêm thông tin đó vào câu hỏi. – Chris

0

Về cơ bản, bạn cần poke nó thông qua libiconv, chuyển đổi nó sang UTF8.

Danh sách đầy đủ các bộ ký tự thích hợp sẽ phụ thuộc vào ứng dụng của bạn, nhưng bạn có thể thực hiện một số dự đoán dựa trên mã quốc gia. Bắt đầu với this page on WikiPedia.

Cảnh báo: Bạn sẽ cần một người để xác minh mỗi chuyển đổi.

0

Tiếp tục với ý kiến ​​của Richard: nếu trang web chứa hình thức chỉ định một bộ ký tự (ví dụ như iso-8859-1 == unicode) & mã hóa (ví dụ utf-8) thì trình duyệt tiêu chuẩn phù hợp nên gửi dữ liệu biểu mẫu bằng cách sử dụng bộ ký tự và mã hóa đó. Nếu các trang web của bạn chỉ định unicode, thì bạn không cần phải đối phó với các trang mã Microsoft ngẫu nhiên trong dữ liệu - tất cả đều phải là unicode.

+0

Ok, tôi đã thêm thông tin này vào câu hỏi. – Chris