2012-02-06 46 views
10

Tôi muốn lưu dữ liệu unicode vào cơ sở dữ liệu từ chuỗi xml bằng cách sử dụng mã này:dữ liệu Insert Unicode từ chuỗi xml để DataTable

XmlDocument xmlDoc = new XmlDocument(); 
xmlDoc.LoadXml(xmlText); 

using (XmlNodeReader xmlReader = new XmlNodeReader(xmlDoc)) 
{ 
     DataTable dt = new DataTable(); 
     dt.TableName = "sms"; 
     dt.Columns.Add("rowID"); 
     dt.Columns.Add("origAddr"); 
     dt.Columns.Add("time"); 
     dt.Columns.Add("message"); 
     dt.ReadXml(xmlReader); 
     return dt; 
} 

nhưng khi tôi tiết kiệm DataTable vào cơ sở dữ liệu ký tự unicode của tôi xuất hiện với dấu chấm hỏi (? ??????)

collation cơ sở dữ liệu của tôi là chính xác và ký tự unicode khác được lưu trữ một cách chính xác.

Tôi xin lỗi bạn vì văn bản tiếng Anh kém :)

+5

Xin đính kèm mã để lưu dữ liệu trong cơ sở dữ liệu bạn đã viết. – Maheep

+0

Bạn đang sử dụng loại cơ sở dữ liệu nào? MySQL, SQL Server, MS Access? Phiên bản nào? Ngoài ra, hãy hiển thị cho chúng tôi định nghĩa bảng kết quả từ mã này. Tôi đặc biệt quan tâm đến bộ ký tự của bảng và cơ sở dữ liệu. –

+0

Ngoài các bình luận trước, cũng cố gắng sử dụng một số phông chữ khác để kiểm tra nội dung của cơ sở dữ liệu. Có thể dữ liệu thực sự được lưu trữ đúng cách, nhưng phông chữ mà nó đang được hiển thị không bao gồm một số ký tự và bất kỳ phần mềm nào bạn đang sử dụng để xem dữ liệu sẽ rơi về '?' Placeholders. Không phải là lời giải thích có khả năng nhất, nhưng dễ dàng đủ để kiểm tra để có giá trị nó;) –

Trả lời

1

Tôi sẽ bắt đầu mọi thứ với dự đoán được giáo dục.

Cơ sở dữ liệu của bạn hoặc bảng của bạn, sử dụng bộ ký tự không đầy đủ Unicode. Các ký tự được lưu trữ dưới dạng dấu hỏi là các ký tự nằm ngoài cơ sở dữ liệu hoặc bộ ký tự bảng. Các ký tự được lưu trữ chính xác xảy ra trong cơ sở dữ liệu hoặc bộ ký tự bảng.

Hoặc, bạn có các đối tượng XMLDocument() hoặc DataTable() đang chuyển đổi các ký tự mà chúng đọc thành tập ký tự nhỏ hơn Unicode đầy đủ.

Cung cấp thêm thông tin theo yêu cầu của nhận xét và tôi sẽ xem liệu tôi có thể cải thiện câu trả lời này không.

0

Thông thường điều này xảy ra khi văn bản nguồn của bạn không được lưu dưới dạng Unicode. Ví dụ: nếu bạn đọc dữ liệu xml của mình từ tệp văn bản và tệp văn bản được lưu trữ dưới dạng Ansi (sử dụng bảng mã) hoặc tệp được lưu trữ dưới dạng tệp Unicode mà không có BOM (Dấu đơn hàng hoặc ký tự), khi bạn đọc văn bản của mình tệp, ký tự không phải ASCII có thể không được đọc chính xác.
Để giải quyết vấn đề này, hãy mở tệp xml nguồn của bạn trong trình soạn thảo văn bản (ví dụ: Notepad++) và thay đổi mã hóa thành Unicode hoặc UTF-8, sau đó lưu tệp.
Bạn cũng có thể mở tệp trong Notepad và lưu tệp dưới dạng Unicode (Tệp/Lưu dưới dạng -> Mã hóa: Unicode hoặc UTF-8). Đảm bảo rằng khi bạn mở tệp của mình trong notepad, các ký tự được hiển thị chính xác.

0

sử dụng XmlTextReader cho đọc xml và xác minh nếu lỗi vẫn tồn

XmlTextReader stream = new XmlTextReader(_pathXml); 
    while (stream.Read()) 
    { 
     //TODO save each element 
    } 
Các vấn đề liên quan