Convertir a UTF-8
Un texto que muestra "Café del Mar" en lugar de "Café del Mar" no perdió sus datos: era UTF-8 que se leyó como Latin-1 o Windows-1252, y cada letra acentuada se partió en dos símbolos sueltos. Pegue el texto afectado y esta herramienta revierte esa corrupción concreta, devolviendo los caracteres originales en UTF-8 limpio.
Ejecutar — gratis
De dónde vienen estos caracteres rotos
El texto no trae una etiqueta que diga en qué encoding se guardó, así que un programa tiene que asumir uno. El desajuste más común es contenido UTF-8 leído como Latin-1 o Windows-1252: no produce un error, simplemente convierte en silencio cada letra acentuada, comilla tipográfica o carácter no latino en una breve tira de símbolos raros —"é" se vuelve "é", "’" se vuelve "’"— porque los mismos bytes se asignan a símbolos distintos en cada encoding.
Qué hace realmente el arreglo
Pegue el texto deformado y la herramienta revierte exactamente esa corrupción: reasigna los símbolos sueltos a los bytes de los que salieron y los vuelve a leer como UTF-8, y luego devuelve el texto reparado normalizado a NFC. Como el daño es reversible, recupera los caracteres originales de cualquier idioma —francés, japonés, árabe— siempre que la corrupción sea esta lectura errónea Latin-1/Windows-1252. No es un conversor de encodings general: no identifica encodings de origen arbitrarios, no convierte texto guardado en Shift-JIS, GBK u otros encodings de Asia oriental, ni recupera caracteres ya reemplazados por signos de interrogación.
Cómo funciona la solicitud y el precio
Envía el texto con un POST a /data/to-utf8 y la llamada devuelve un task_id, y luego entrega el texto UTF-8 reparado a su webhook firmado o mediante un enlace firmado válido por 24 horas. El precio es fijo, $0.002 por solicitud, y un trabajo que falla tras tres reintentos nunca se cobra. La herramienta de arriba hace el mismo arreglo gratis en su navegador — nada se envía a un servidor.
Por qué UTF-8 es la respuesta y no solo una opción
UTF-8 se volvió el encoding dominante en la web justamente porque puede representar cada carácter del estándar Unicode y a la vez mantiene compatibilidad hacia atrás con el texto ASCII plano, y por eso los navegadores, bases de datos y APIs modernas lo usan por defecto. Devolver el texto a UTF-8 limpio es lo que lo hace portable a cualquier sistema que lo vaya a tocar después, en lugar de partirse en símbolos apenas se mueve.
Dónde encaja en la automatización
Este tipo de mojibake suele aparecer en el peor momento posible, en lo profundo de un flujo que asumía una entrada limpia, así que el arreglo pertenece justo donde llega el texto: apenas se pega, se importa o se recupera un registro antiguo, y antes de que algo lea o muestre su contenido. El acceso por API requiere saldo prepago, lo que mantiene las peticiones rápidas y el servicio sin abuso. Este endpoint está activo ahora.
Qué puede hacer con ella
Rescatar filas pegadas de una exportación antigua
Un equipo de datos pega las filas rotas de un CSV exportado hace diez años que muestran garabatos tipo "é" y recupera texto UTF-8 limpio antes de cargarlo en un pipeline de analítica moderno.
Limpiar contenido recibido
Una plataforma editorial pasa por el arreglo el texto de artículos que llegó con mojibake Latin-1/Windows-1252, para que aterrice en el CMS con los caracteres acentuados intactos.
Corregir una conversión previa fallida
Un equipo de soporte pega texto que quedó dañado cuando UTF-8 se leyó como Windows-1252, recuperando los caracteres acentuados y especiales originales en lugar de dejarlos rotos.
Limpieza de un sistema heredado
Un equipo de TI pasa por el arreglo el texto extraído de un sistema Windows-1252 que se está retirando, para corregir el mojibake antes de guardarlo como UTF-8.
Preguntas frecuentes
¿Cómo arreglo el mojibake con una API?
Envíe el texto afectado con un POST a /data/to-utf8. La llamada devuelve un task_id de inmediato y entrega el texto UTF-8 reparado a su webhook o a un enlace firmado al terminar el proceso.
¿Esta API es gratis?
La herramienta de arriba es gratis en su navegador. La API es de pago: cada llamada se descuenta de su saldo prepago de ForHosting KIT — se recarga desde $10.00 (no caduca), se paga el precio publicado de cada solicitud, y una llamada sin saldo devuelve HTTP 402. Sin suscripción, sin tokens, y una tarea fallida no se cobra.
¿Qué son los caracteres rotos y esto los arregla?
Los caracteres rotos, o mojibake, aparecen cuando un texto se decodifica con el encoding equivocado. Esta herramienta revierte el caso común Latin-1/Windows-1252 —el patrón "é"—, recuperando los caracteres previstos.
¿Qué corrupción maneja?
La lectura errónea Latin-1/Windows-1252 de un UTF-8 —el garabato tipo "é", "’", "ع"— para texto de cualquier idioma. Deja intacto el UTF-8 que ya es válido. No identifica encodings arbitrarios ni convierte Shift-JIS, GBK o similares, y no puede recuperar caracteres ya convertidos en signos de interrogación.
¿Pego texto o subo un archivo?
Pega el texto afectado (un fragmento de un archivo sirve); la herramienta trabaja sobre el texto que envía, no sobre un archivo subido, así que copie las filas dañadas y lea el texto reparado.
¿Puedo procesar muchos textos en lote?
Sí, cada texto se envía como su propia solicitud y se procesa de forma independiente, así que un lote puede procesarse en paralelo con cada resultado entregado por webhook a medida que termina.
¿La API de reparación de encoding ya está activa?
Sí, este endpoint está activo hoy al precio publicado de $0.002 por solicitud.
¿Qué pasa con mi texto después del arreglo?
El texto enviado y el resultado reparado se eliminan tras la ventana de retención y jamás se usan para entrenar nada. La entrega es por webhook firmado o por un enlace firmado válido por 24 horas.
Para desarrolladores — acceso por API
Todo lo de esta página está disponible por programación. Esta sección es para equipos que quieren integrarlo en sus sistemas; el resto puede usar la herramienta de arriba sin más.
Endpoint de API
¿Prefiere automatizarlo? Un POST autenticado crea la tarea; el resultado llega por webhook o enlace firmado. La misma capacidad también se ejecuta aquí en la web, por email y desde Telegram — y pronto también desde nuestra app.
Llámela desde su stack
curl -X POST https://api.kit.forhosting.com/data/to-utf8 \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"café"}'const res = await fetch("https://api.kit.forhosting.com/data/to-utf8", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "café"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/to-utf8",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "café"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/to-utf8", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"café"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"café"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/to-utf8", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Ejemplo de solicitud
{
"text": "café"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.to_utf8",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}La API es asíncrona: la llamada devuelve un task_id al instante y el resultado llega por webhook. El polling está limitado a 1 req/s por tarea.
Precio
Precio publicado — sin tokens ni créditos inventados. Una tarea fallida no se cobra.
Límites
max_mb | 25 |
Errores
| HTTP | Código | Significado |
|---|---|---|
401 | unauthorized | API key ausente o inválida. |
402 | insufficient_balance | El saldo no cubre el precio de la tarea. |
404 | unknown_type | El tipo de tarea no existe. |
429 | rate_limited | Demasiadas peticiones. Use el webhook en vez de sondear. |