Có một cái nhìn tại link này từ w3, nó cho tôi biết rằng:
In HTML, there is a list of some built-in character names like é
for é but XML does not have this. In XML, there are only five built-in character entities: <
, >
, &
, "
and '
for <, >, &, " and ' respectively. You can define your own entities in a Document Type Definition, or you can use any Unicode character (see next item).
In HTML, there are also numeric character references, such as &
for &. You can refer to any Unicode character, but the number is decimal, whereas in the Unicode tables the number is usually in hexadecimal. XML also allows hexadecimal references: &
for example.
Điều này khiến tôi tin rằng, é
có thể hoạt động đối với nhân vật é.
Ngoài ra các thông tin tại link này từ Microsoft khẳng định rằng:
SQLXML 4.0 relies upon the limited support for DTDs provided in SQL Server. SQL Server allows for an internal DTD in xml data type data, which can be used to supply default values and to replace entity references with their expanded contents. SQLXML passes the XML data "as is" (including the internal DTD) to the server. You can convert DTDs to XML Schema (XSD) documents using third-party tools, and load the data with inline XSD schemas into the database.
Nhưng tất cả điều này không giúp bạn nếu bạn không có quyền kiểm soát các dòng XML đến. Tôi nghi ngờ rằng có thể lưu một é (hoặc bất kỳ ký tự đặc biệt nào cho vấn đề đó, ngoại trừ các thực thể ký tự được đề cập ở trên) bên trong một tài liệu XML vào trường SQL Server XML, mà không cần thêm DTD hoặc thay thế ký tự đối số tham chiếu thập lục phân của nó. Trong cả hai trường hợp, bạn sẽ cần phải có khả năng sửa đổi XML trước khi nó đi vào cơ sở dữ liệu.
Chỉ cần một ví dụ nhanh cho bất kỳ ai muốn đi xuống tuyến đường "thêm DTD".
Dưới đây là làm thế nào để thêm một DTD nội bộ để một file xml mà tuyên bố một thực thể cho một nhân vật é:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE root [<!ENTITY eacute "é">]>
<root>
<RegionName>Québec</RegionName>
</root>
Nếu bạn đi here và tìm kiếm trên trang "Ctrl + F" cho "eacute", bạn kết thúc trong một danh sách với các ví dụ cho các nhân vật khác mà bạn chỉ có thể sao chép và dán vào DTD nội bộ của riêng bạn.
Sửa
Bạn có thể tắt khóa học thêm tất cả các đơn vị khi chúng được quy định tại các link trên: <!ENTITY eacute "é"><!ENTITY .. // Next entity>
, hoặc chỉ cần sao chép tất cả từ file này. Tôi hiểu cách thêm một DTD nội bộ vào mỗi tệp XML mà bạn thêm vào cơ sở dữ liệu không phải là một ý tưởng hay. Tôi sẽ được quan tâm để biết nếu thêm nó cho 1 tập tin sửa chữa vấn đề của bạn mặc dù.
Tôi nghĩ rằng máy chủ * sql sử dụng mã hóa utf-16 và khai báo 'utf-8' trong xml là lý do tại sao nó không thành công. FWIW, nếu bạn loại bỏ hoàn toàn việc khai báo 'encoding', hoặc thay đổi nó thành' encoding = "UTF-16" 'chèn thành công trong CF10, với cài đặt" Enable High ASCII characters ... "được bật. (Thay đổi mã hóa của chỉ chuỗi không có hiệu lực.) Tuy nhiên, tôi không biết nếu điều này có bất kỳ tác động tiêu cực phụ. – Leigh
Lưu ý, mã hóa ký tự là * không * sở trường của tôi ;-) Nhận xét của tôi ở trên chỉ dựa trên một vài kiểm tra nhanh. Nó không phải là một câu trả lời chắc chắn, nhưng hy vọng nó có thể giúp chỉ cho bạn đi đúng hướng. – Leigh
Bạn nhận được XML như thế nào? Nghe có vẻ như tôi không nói với CF rằng đó là UTF-8. –