Zde je možné řešení, ale není vyzkoušeno, takže na to pamatujte!
Před časem jsem narazil na podobný problém se speciálními znaky v Oracle. Naše znaková sada je nastavena na UTF-16. Měl podivné věci, jako jsou přehlásky a další znaky ASCII mimo normální rozsah 32-127.
Jedna věc, kterou byste mohli zkusit, je nejprve provést kódování HTML pro cokoli mimo tento rozsah, načíst to do vaší datové tabulky v c# a poté, jak se datová tabulka zaplní (nebo poté, co byla vyplněna...), proveďte dekódování html na těchto polích.
Máme funkci kódování html, která to dělá za nás, například takto:
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;
Takže by to mělo načíst data „řetězec“ do vaší tabulky a v každém případě, kdy máte speciální znaky, by se to zobrazilo jako „½“ nebo něco v tomto smyslu.
Pak na straně C# můžete udělat něco s dekódováním html:
using System.Web;
HttpUtility.HtmlDecode(mystring);
Opět... nevyzkoušeno. Ale mělo by být velmi snadné jej implementovat a otestovat a/nebo mírně upravit, aby fungoval.
Alternativním řešením by také bylo jednoduše provést opravu dat ve vaší databázi, aby se všechny tyto speciální znaky změnily na "běžné" reprezentace (tj. em-pomlčku na normální pomlčku). Můžete to udělat s některými regulárními výrazy pomocí funkce CHR() a pro zobrazení lichých dat pomocí funkce DUMP().