Aquí hay una posible solución, pero no se ha probado, ¡así que tenlo en cuenta!
Me encontré con un problema similar hace algún tiempo con caracteres especiales en Oracle. Tenemos nuestro carácter establecido en UTF-16. Tenía cosas extrañas como diéresis y otros caracteres ASCII fuera del rango normal de 32-127.
Una cosa que puede intentar es primero hacer una codificación HTML para cualquier cosa fuera de ese rango, cargar eso en su tabla de datos en c #, luego, cuando la tabla de datos se está llenando (o después de que se haya llenado...), realice una decodificación html en esos campos.
Tenemos una función de codificación html que hace esto por nosotros, así:
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;
Así que esto debería cargar datos de "cadena" en su tabla y cualquier caso en el que tenga caracteres especiales, aparecerá como '½' o algo por el estilo.
Luego, en el lado de C#, podría hacer algo con la decodificación html:
using System.Web;
HttpUtility.HtmlDecode(mystring);
De nuevo... sin probar. Pero debería ser muy fácil de implementar y probar y/o modificarlo ligeramente para que funcione.
Una solución alternativa también sería simplemente realizar una corrección de datos en su base de datos para cambiar todos esos caracteres especiales a representaciones "regulares" (es decir, un guión largo a un guión normal). Puede hacerlo con algunas expresiones regulares, usando la función CHR(), y para ver datos impares usando la función DUMP().