Đây là một giải pháp khả thi, nhưng nó chưa được thử nghiệm, vì vậy hãy ghi nhớ điều đó!
Tôi đã gặp một vấn đề tương tự cách đây một thời gian với các ký tự đặc biệt trong Oracle. Chúng tôi đặt ký tự của chúng tôi thành UTF-16. Có những thứ wierd như umlauts và các ký tự ascii khác ngoài phạm vi 32-127 bình thường.
Một điều bạn có thể thử trước tiên là thực hiện mã hóa HTML cho bất kỳ thứ gì bên ngoài phạm vi đó, tải dữ liệu đó vào vùng dữ liệu của bạn trong c #, sau đó khi dữ liệu được lấp đầy (hoặc sau khi nó được điền ...), hãy thực hiện giải mã html trên các trường đó.
Chúng tôi có một chức năng mã hóa html thực hiện điều này cho chúng tôi, như sau:
FUNCTION HTML_Encode_Special_Characters
(p_string IN VARCHAR2,
p_do_encode IN VARCHAR2 DEFAULT 'Y')
RETURN VARCHAR2 IS
first_location number := REGEXP_INSTR(p_string, '([^' || CHR(1) || '-' || CHR(127) || '])');
v_string VARCHAR2(32000);
v_char VARCHAR2(1 char);
v_ascii_number number;
BEGIN
IF p_do_encode = 'Y' AND first_location > 0 THEN
v_string := p_string;
FOR i IN first_location .. length(v_string) LOOP
v_char := substr(v_string,i,1);
v_ascii_number := ascii(v_char);
IF v_ascii_number > 128 THEN
-- just replace all of them
v_string := REPLACE (v_string, v_char,'&#' || v_ascii_number || ';');
END IF;
END LOOP;
RETURN (v_string);
ELSE
RETURN p_string;
END IF;
END;
Vì vậy, điều này sẽ tải dữ liệu "chuỗi" vào bảng của bạn và bất kỳ trường hợp nào bạn có các ký tự đặc biệt, nó sẽ hiển thị như ' 189' hoặc cái gì đó có hiệu lực.
Sau đó, ở phía C #, bạn có thể làm điều gì đó với giải mã html:
using System.Web;
HttpUtility.HtmlDecode(mystring);
Một lần nữa ... chưa được kiểm tra. Nhưng nó sẽ rất dễ triển khai và thử nghiệm và / hoặc chỉnh sửa một chút để làm cho nó hoạt động.
Một giải pháp thay thế cũng sẽ là chỉ cần thực hiện một datafix trên cơ sở dữ liệu của bạn để thay đổi tất cả các ký tự đặc biệt đó thành các đại diện "thông thường" (nghĩa là một dấu gạch ngang em thành một dấu gạch ngang bình thường). Bạn có thể làm điều đó với một số biểu thức chính quy, sử dụng hàm CHR () và để xem dữ liệu lẻ bằng hàm DUMP ().