Este es un ejemplo de correo electrónico prima que estoy tratando de analizar:¿Qué es "= C2 = A0" en MIME codificado, texto imprimible entre comillas?
MIME-version: 1.0
Content-type: text/html; charset=UTF-8
Content-transfer-encoding: quoted-printable
X-Mailer: Verizon Webmail
X-Originating-IP: [x.x.x.x]
=C2=A0test testing testing 123
¿Qué es = C2 = A0? He intentado una media docena de analizadores imprimibles entre comillas, pero ninguno maneja esto correctamente. ¿Cómo se podría analizar esto correctamente en C#?
Honestamente, por ahora, estoy de codificación:
//TODO WTF
encoded = encoded.Replace("=C2=A0", "");
Porque no puedo entender por qué ese texto no es al azar dentro del contenido MIME, y no se supone que debe ser dictada en cualquier cosa . Con solo quitarlo, obtengo el efecto deseado, pero ¿POR QUÉ?
Para ser claro, sé que (= [0-9A-F] {2}) es un carácter codificado. Pero en este caso, aparentemente no representa NADA.
¿Cuál es la manera de analizar esto en C#? Todos los analizadores que he probado operan en cada char de manera independiente, y hago esto: int iHex = Convert.ToInt32 (hex, 16); char c = (char) iHex; – TheSoftwareJedi
¿UTF-8 siempre codifica en 2 bytes de esta manera? ¿Puedo suponer una coincidencia de (= [0-9A-F] {2} = [0-9A-F] {2}) en lugar del byte único? ¿Por qué diablos no hay un analizador para esto?!?!?!?! – TheSoftwareJedi
Si lee en UTF-8, verá que cualquier valor de un solo byte que exceda 7F tiene que codificarse en dos caracteres, y el primero siempre tendrá su bit alto establecido. Entonces, sí, A0 siempre está codificado como C2 A0, lo que significa que no puede ir byte a byte. La forma correcta de manejar UTF-8 con codificación entrecomillada es decodificar primero la parte entrecomillada y luego decodificar el UTF-8, lo que da como resultado una cadena compuesta de caracteres de 2 bytes (técnicamente UCS-16 o UTF-16). –