Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with special characters #37

Closed
arturograu opened this issue Jul 7, 2023 · 4 comments
Closed

Issue with special characters #37

arturograu opened this issue Jul 7, 2023 · 4 comments

Comments

@arturograu
Copy link

Hello! first of all thank you for your work on this library.

I am having an issue transforming an html file with characters like for example: è or when is a space and then a dot.
It shows weird characters like for example  instead è.

Another case is when I have the symbol ". It shows instead â followed by two boxes.

I hope my problem is more or less clear.

Thank you again!

@jarontai
Copy link
Owner

Hi there, I suspect it might have something to do with the string replacement logic, could you provide a minimal reproducible example?

@arturograu
Copy link
Author

Hi! any website in Spanish is giving the same results.
For example you can try with this HTML:

<html data-wf-domain="www.fluttered.io" data-wf-page="6183aa4520ec744651be4f39" data-wf-site="6132572ab3d055781e46979f" lang="es" class=" w-mod-js w-mod-ix" translate="no"><head><style>.wf-force-outline-none[tabindex="-1"]:focus{outline:none;}</style><meta charset="utf-8"><title>Política de privacidad - Fluttered</title><meta content="Toda la información que necesitas para saber como almacenamos y tratamos tus datos para proteger tu privacidad y cumplir con las leyes LOPD y RGPD." name="description">
<link rel="alternate" hreflang="en" href="https://en.fluttered.io">

</head><body><a fs-cc="manager" href="#" class="ck-prefmanager-w w-inline-block" style="display: flex; opacity: 1;"><div fs-cc="open-preferences" class="ck-preference__btn" role="button" tabindex="0"><img src="https://uploads-ssl.webflow.com/6132572ab3d055781e46979f/61b78992a7ce6ea9ddb7ca5d_ck__cookie.svg" loading="lazy" alt="" class="ck-preference__icon"><div class="ck-preference-txt">Ajustes de cookies</div></div></a><div fs-cc="preferences" class="ck-preference-w" style="display: none;"><div fs-cc="close" class="ck-preference__bg" role="button" tabindex="0"></div><div class="ck-preference__scroll-w"><div class="ck-modal"><a fs-cc="close" href="#" class="ck-modal__exit-btn w-inline-block"><div class="ck__exitbtn__line is--left"></div><div class="ck__exitbtn__line is--right"></div><div class="ck-sr__only">Close Cookie Preference Manager</div></a><div class="ck-modal__content-w"><div class="ck-title">Configuración de cookies</div><div class="text-block">Al hacer click en “Aceptar todas las cookies”, aceptas que guardemos cookies en tu dispositivo para mejorar tu experiencia de usuario y analizar el uso que se hace del sitio web. <a href="/cookies">Más información</a>.</div><div class="ck-form-w w-form"><form id="ck-form" name="wf-form-ck-form" data-name="ck-form" method="get" class="ck-form" aria-label="ck-form"><div class="ck-radio-w is--not-allowed w-clearfix"><div class="ck-radio__btn is--checked is--not-allowed"></div><div class="ck-radio__label is--not-allowed">Cookies estrictamente necesarias (Siempre activas)</div><div class="text-span">Cookies requeridas para habilitar el funcionamiento básico de la web.</div></div><label class="w-checkbox ck-radio-w ck-radio-hidden w-clearfix"><div class="w-checkbox-input w-checkbox-input--inputType-custom ck-radio__btn"></div><input type="checkbox" id="fs__marketing-2" name="fs__marketing-2" data-name="Fs Marketing 2" fs-cc-checkbox="marketing" style="opacity:0;position:absolute;z-index:-1"><span for="fs__marketing-2" class="ck-radio__label w-form-label">Marketing</span><div class="ck-radio__desc">Cookies used to deliver advertising that is more relevant to you and your interests.</div></label><label class="w-checkbox ck-radio-w ck-radio-hidden w-clearfix"><div class="w-checkbox-input w-checkbox-input--inputType-custom ck-radio__btn"></div><input type="checkbox" id="fs__personalization-2" name="fs__personalization-2" data-name="Fs Personalization 2" fs-cc-checkbox="personalization" style="opacity:0;position:absolute;z-index:-1"><span for="fs__personalization-2" class="ck-radio__label w-form-label">Personalization<br></span><div class="ck-radio__desc">Cookies allowing the website to remember choices you make (such as your user name, language, or the region you are in).</div></label><label class="w-checkbox ck-radio-w w-clearfix"><div class="w-checkbox-input w-checkbox-input--inputType-custom ck-radio__btn"></div><input type="checkbox" id="fs__analytics-2" name="fs__analytics-2" data-name="Fs Analytics 2" fs-cc-checkbox="analytics" style="opacity:0;position:absolute;z-index:-1"><span for="fs__analytics-2" class="ck-radio__label w-form-label">Analítica<br></span><div class="ck-radio__desc">Estas cookies nos ayudan a detectar problemas técnicos, obtener información del rendimiento del sitio web y entender cómo los visitantes interactúan con el sitio.</div></label><div class="ck-modal__btns-w in-pref-manger"><a fs-cc="allow" href="#" class="ft-button is--full-width w-inline-block" role="button" tabindex="0"><div class="ck-button__txt">Aceptar todas las cookies</div></a><a fs-cc="submit" href="#" class="ck-button-w-2 is--secondary is--fullwidth w-inline-block" role="button" tabindex="0"><div>Guardar configuración</div></a></div></form><div class="w-form-done" tabindex="-1" role="region" aria-label="ck-form success"><div class="text-block-5">Made by <a href="https://flinch77.com&amp;ref=cookie-cloneable" target="_blank">Flinch 77</a></div></div><div class="w-form-fail" tabindex="-1" role="region" aria-label="ck-form failure"><div>Oops! Something went wrong while submitting the form.</div></div></div></div></div></div></div><div class="ck-cookie-w"><div class="ck-css-styles w-embed"><style>

.ck-preference__bg {
	-webkit-backdrop-filter: blur(0.75rem);
  backdrop-filter: blur(0.75rem);
}

.ck-preference__scroll-w::-webkit-scrollbar {
	display: none;
} .ck-preference__scroll-w {
  -ms-overflow-style: none; 
  scrollbar-width: none; 
}

.w--redirected-focus {
	box-shadow: none!important;
}

</style></div><div fs-cc="banner" class="ck-modal" style="display: none; opacity: 0;"><a fs-cc="close" href="#" class="ck-modal__exit-btn w-inline-block" role="button" tabindex="0"><div class="ck__exitbtn__line is--left" style="background-color: rgb(81, 87, 80);"></div><div class="ck__exitbtn__line is--right" style="background-color: rgb(81, 87, 80);"></div><div class="ck-sr__only">Close Cookie Popup</div></a><div class="ck-modal__content-w is--small"><div class="ck-title is--small">Tu privacidad es importante<br></div><div class="text-block">Usamos cookies para mejorar tu experiencia y con fines de comercialización. Más información en nuestra <a href="/cookies">política de cookies</a>.<br></div></div><div class="ck-modal__btns-w is--small"><a fs-cc="allow" href="#" class="button w-inline-block" role="button" tabindex="0"><div class="ck-button__txt">Aceptar todas las cookies</div></a><a fs-cc="open-preferences" href="#" class="link-block w-inline-block" role="button" tabindex="0"><div fs-cc="open-preferences" class="text-block-6">Ajustes de cookies</div></a></div><div class="ck-attr-btn">Made by <a href="https://flinch77.com&amp;ref=cookie-cloneable" target="_blank">Flinch 77</a></div></div></div><div data-collapse="medium" data-animation="default" data-duration="400" data-easing="ease" data-easing2="ease" role="banner" class="navigation-dark w-nav"><div class="navigation-container"><div class="navigation-block-left"><nav role="navigation" class="nav-menu w-nav-menu"><a href="/" class="nav-link-light w-nav-link">Home</a><a href="/consultoria" class="nav-link-light w-nav-link">Consultoría digital</a><a href="/sobre-nosotros" class="nav-link-light w-nav-link">Sobre nosotros</a><a href="/blog" class="nav-link-light w-nav-link">Blog</a></nav></div><a href="/" class="brand w-nav-brand" aria-label="home"><img src="https://uploads-ssl.webflow.com/6132572ab3d055781e46979f/6136183579ae3a54220e20eb_fluttered_logo.svg" loading="lazy" alt="" class="logo"></a><div class="navigation-right"><div class="account-buttons"><a href="/contacto" class="navigation-link-dark-signup w-button">Contacto</a><div class="weglot-container weglot-container--left" data-switcher-id="1" id="weglot-switcher-1" data-switcher-style-opt="{&quot;with_name&quot;:true,&quot;full_name&quot;:false,&quot;is_dropdown&quot;:true,&quot;with_flags&quot;:false,&quot;flag_type&quot;:&quot;shiny&quot;,&quot;custom_css&quot;:&quot;&quot;}"><aside data-wg-notranslate="true" aria-expanded="false" tabindex="0" aria-label="Language selected: Español" class="weglot_switcher wg-drop wg-mouse-click country-selector closed"><div data-l="es" class="wg-li es wgcurrent"><a tabindex="-1" target="_self" href="#" id="weglot-language-es">ES</a></div><ul role="none" style="display: none;"><li data-l="en" role="none" id="wg-en" class="wg-li en"><a role="option" href="https://en.fluttered.io/politica-de-privacidad" id="weglot-language-en">EN</a></li></ul></aside></div></div><div class="navigation-menu-dark w-nav-button" style="-webkit-user-select: text;" aria-label="menu" role="button" tabindex="0" aria-controls="w-nav-overlay-0" aria-haspopup="menu" aria-expanded="false"><div class="w-icon-nav-menu"></div></div></div></div><div class="w-nav-overlay" data-wf-ignore="" id="w-nav-overlay-0"></div></div><div class="header"><div class="container"><h1 class="heading-white">Política de privacidad</h1></div></div><div class="content-section"><div class="container-small"><div class="article w-richtext"><h3><strong>Información al usuario</strong></h3><p>FLUTTERED, S.L., como Responsable del Tratamiento, le informa que, según lo dispuesto en el Reglamento (UE) 2016/679, de 27 de abril, (RGPD) y en la L.O. 3/2018, de 5 de diciembre, de protección de datos y garantía de los derechos digitales (LOPDGDD), trataremos su datos tal y como reflejamos en la presente Política de Privacidad.</p><p>En esta Política de Privacidad describimos cómo recogemos sus datos personales y por qué los recogemos, qué hacemos con ellos, con quién los compartimos, cómo los protegemos y sus opciones en cuanto al tratamiento de sus datos personales.</p><p>Esta Política se aplica al tratamiento de sus datos personales recogidos por la empresa para la prestación de sus servicios. Si acepta las medidas de esta Política, acepta que tratemos sus datos personales como se define en esta Política.</p><h4>Contacto</h4><ul role="list"><li>Denominación social: FLUTTERED, S.L.</li><li>Nombre comercial: Fluttered</li><li>CIF: B16884983</li><li>Datos registrales: VALENCIA MERCANTIL con fecha 23/09/2021, número de inscripción 1, tomo 11052, folio 209, hoja 200445.</li><li>Domicilio: Calle Joaquín Costa 7, 3, Xirivella, Valencia, 46950</li><li>e-mail: info@fluttered.io</li></ul><h4>Principios clave</h4><p>Siempre hemos estado comprometidos con prestar nuestros servicios con el más alto grado de calidad, lo que incluye tratar sus datos con seguridad y transparencia. Nuestros principios son:</p><ul role="list"><li><strong>Legalidad</strong>: Solo recopilaremos sus Datos personales para fines específicos, explícitos y legítimos.</li><li><strong>Minimización de datos</strong>: Limitamos la recogida de datos de carácter personal a lo que es estrictamente relevante y necesario para los fines para los que se han recopilado.</li><li><strong>Limitación de la Finalidad</strong>: Solo recogeremos sus datos personales para los fines declarados y solo según sus deseos.</li><li><strong>Precisión</strong>: Mantendremos sus datos personales exactos y actualizados.</li><li><strong>Seguridad de los Datos</strong>: Aplicamos las medidas técnicas y organizativas adecuadas y proporcionales a los riesgos para garantizar que sus datos no sufran daños, tales como divulgación o acceso no autorizado, la destrucción accidental o ilícita o su pérdida accidental o alteración y cualquier otra forma de tratamiento ilícito.</li><li><strong>Acceso y Rectificación</strong>: Disponemos de medios para que acceda o rectifique sus datos cuando lo considere oportuno.</li><li><strong>Conservación</strong>: Conservamos sus datos personales de manera legal y apropiada y solo mientras es necesario para los fines para los que se han recopilado.</li><li><strong>Las transferencias internacionales</strong>: cuando se dé el caso de que sus datos vayan a ser transferidos fuera de la UE/EEE se protegerán adecuadamente.</li><li><strong>Terceros</strong>: El acceso y transferencia de datos personales a terceros se llevan a cabo de acuerdo con las leyes y reglamentos aplicables y con las garantías contractuales adecuadas.</li><li><strong>Marketing Directo y cookies</strong>: Cumplimos con la legislación aplicable en materia de publicidad y cookies.</li></ul><h4>Recogida y tratamiento de sus datos personales</h4><p>Las tipos de datos que se pueden solicitar y tratar son:</p><ul role="list"><li>Datos de carácter identificativo.</li></ul><p>También recogemos de forma automática datos sobre su visita a nuestro sitio web &nbsp;según se describe en la política de cookies.</p><p>Siempre que solicitemos sus Datos personales, le informaremos con claridad de qué datos personales recogemos y con qué fin. En general, recogemos y tratamos sus datos personales con el propósito de:</p><ul role="list"><li>Proporcionar información, servicios, productos, información relevante y novedades en el sector.</li><li>Envío de comunicaciones.</li></ul><h4>Legitimidad</h4><p>De acuerdo con la normativa de protección de datos aplicable, sus datos personales podrán tratarse siempre que:</p><ul role="list"><li>Nos ha dado su consentimiento a los efectos del tratamiento. Por supuesto podrá retirar su consentimiento en cualquier momento.</li><li>Por requerimiento legal.</li><li>Por exisitr un interés legítimo que no se vea menoscabado por sus derechos de privacidad, como por ejemplo el envío de información comercial bien por suscripción a nuestra newsletter o por su condición de cliente.</li><li>Por se necesaria para la prestación de alguno de nuestros servicios mediante relación contractual entre usted y nosotros.</li></ul><h4>Comunicación de datos personales</h4><p>Los datos pueden ser comunicados a empresas relacionadas con FLUTTERED, S.L. para la prestación de los diversos servicios en calidad de Encargados del Tratamiento. La empresa no realizará ninguna cesión, salvo por obligación legal.</p><h4>Sus derechos</h4><p>En relación con la recogida y tratamiento de sus datos personales, puede ponerse en contacto con nosotros en cualquier momento para:</p><ul role="list"><li>Acceder a sus datos personales y a cualquier otra información indicada en el Artículo 15.1 del RGPD.</li><li>Rectificar sus datos personales que sean inexactos o estén incompletos de acuerdo con el Artículo 16 del RGPD.</li><li>Suprimir sus datos personales de acuerdo con el Artículo 17 del RGPD.</li><li>Limitar el tratamiento de sus datos personales de acuerdo con el Artículo 18 del RGPD.</li><li>Solicitar la portabilidad de sus datos de acuerdo con el Artículo 20 del <a href="https://presencialismo.com/" target="_blank">RGPD</a>.</li><li>Oponerse al tratamiento de sus datos personales de acuerdo con el artículo 21 del RGPD.</li></ul><p>Si ha otorgado su consentimiento para alguna finalidad concreta, tiene derecho a retirar el consentimiento otorgado en cualquier momento, sin que ello afecte a la licitud del tratamiento basado en el consentimiento previo a su retirada <a href="https://presencialismo.com/" target="_blank">rrhh</a>.</p><p>Puede ejercer estos derechos enviando comunicación, motivada y acreditada, a info@fluttered.io</p><p>También tiene derecho a presentar una reclamación ante la Autoridad de control competente (<a href="https://aepd.es/" target="_blank">www.aepd.es</a>) si considera que el tratamiento no se ajusta a la normativa vigente.<br></p><h4>Información legal</h4><p>Los requisitos de esta Política complementan, y no reemplazan, cualquier otro requisito existente bajo la ley de protección de datos aplicable, que será la que prevalezca en cualquier caso.</p><p>Esta Política está sujeta a revisiones periódicas y la empresa puede modificarla en cualquier momento. Cuando esto ocurra, le avisaremos de cualquier cambio y le pediremos que vuelva a leer la versión más reciente de nuestra Política y que confirme su aceptación.</p></div></div></div><div class="footer-section-dark"><div class="container"><div class="w-layout-grid footer-grid"><div class="footer-column"><img src="https://uploads-ssl.webflow.com/6132572ab3d055781e46979f/6136183579ae3a54220e20eb_fluttered_logo.svg" loading="lazy" alt="" class="footer-logo"><div class="w-layout-grid footer-contact-detail"><div><div class="title-grey-500">Llámanos</div><h5 class="h5-title-turquoise">+34 633 75 25 75</h5></div><div><div class="title-grey-500">Envíanos un email</div><h5 class="h5-title-turquoise">hello@fluttered.io</h5></div></div></div><div class="footer-column"><div class="title-grey-500">Empieza ahora</div><a href="/consultoria" class="footer-link-white w-inline-block"><div>Consultoría</div></a><a href="https://calendly.com/d/y2j-fgs-7kd" class="footer-link-white w-inline-block"><div>Sesión gratuita</div></a></div><div class="footer-column"><div class="title-grey-500">Recursos</div><a href="/blog" class="footer-link-white w-inline-block"><div>Blog</div></a><a href="/faq" class="footer-link-white w-inline-block"><div>FAQ</div></a></div><div class="footer-column"><div class="title-grey-500">Empresa</div><a href="/sobre-nosotros" class="footer-link-white w-inline-block"><div>Sobre nosotros</div></a><a href="/contacto" class="footer-link-white w-inline-block"><div>Contacto</div></a></div></div><div class="w-layout-grid grid-2"><p id="w-node-_257c448c-bbaa-e82c-4ba6-4307456697f9-3cf1c66f" class="body-medium">© 2023 Fluttered</p><div id="w-node-_73a0c652-8675-65d3-5892-d7652319c02c-3cf1c66f" class="div-block-7"><a href="https://climate.stripe.com/ItiZEq" class="link-block-2 w-inline-block"><div class="text-block-7">Miembro de Stripe Climate</div></a><a href="https://climate.stripe.com/ItiZEq" class="link-block-2 w-inline-block"><img src="https://uploads-ssl.webflow.com/6132572ab3d055781e46979f/642ea5c9ff16c804c199f7a0_Stripe%20Climate%20Badge.svg" loading="lazy" width="36" alt=""></a></div></div><div class="footer-line-dark"></div><div class="footer-legal-bar"><div class="w-layout-grid footer-socials"><a id="w-node-_565299d1-c5ab-1158-4e14-9a853cf1c6b7-3cf1c66f" href="/cookies" class="footer-legal-link">Política de cookies</a><a href="/politica-de-privacidad" aria-current="page" class="footer-legal-link w--current">Política de privacidad</a><a href="/legal" class="footer-legal-link">Aviso legal</a></div><div class="w-layout-grid footer-socials _1-column"><a href="https://www.linkedin.com/company/fluttered/" class="w-inline-block"><img src="https://uploads-ssl.webflow.com/6132572ab3d055781e46979f/6132572bb3d055c8e54697eb_Linkedin%20Icon%20Fill.svg" loading="lazy" alt=""></a></div></div></div></div>
</body></html>

Thank you again!

@jarontai
Copy link
Owner

I did a test using some simple spanish words, seems ok, maybe not a problem caused by special characters

import 'package:html2md/html2md.dart' as html2md;
import 'package:test/test.dart';

void main() {
  group('Github issues', () {
    late String spanishHtml;

    setUp(() {
      spanishHtml =
          '''<div>Hola, este es un texto de prueba, no sé si está bien . </div>''';
    });

    test('Github Issue 37', () {
      expect(html2md.convert(spanishHtml),
          '''Hola, este es un texto de prueba, no sé si está bien .''');
    });
  });
}

@arturograu
Copy link
Author

You are right. I should have tested the plain text before. It turns out that the problem is not in your library, is because I am using the http library to retrieve the HTML from an url and in the response headers is not coming the charset, so the http library is encoding the response body with the default encoding (latin1)

I'll see how I can encode the response myself or force the http library to encode it.

Thank you again!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants