Normalizar guiones y rayas
El texto copiado de sitios web, PDF, documentos ofimáticos y sistemas editoriales suele contener caracteres que parecen guiones, pero se comportan de forma distinta al buscar, validar, ordenar o programar.
Ejecutar — gratis
Este normalizador convierte guiones Unicode, rayas cortas y largas, signos menos y variantes relacionadas a un único estilo coherente. Elija un guion, una raya o una raya larga y obtenga el texto limpio junto con el número exacto de caracteres modificados.
Por qué las rayas parecidas causan problemas reales
Un guion común, una raya corta, una raya larga, un signo menos matemático y un guion inseparable pueden parecer casi iguales, sobre todo con una fuente proporcional. Sin embargo, los sistemas informáticos no los consideran equivalentes. Un código de producto copiado de un PDF puede no coincidir con la base de datos porque contiene un guion inseparable. Un valor negativo procedente de un programa editorial puede no reconocerse como número si emplea el signo menos matemático en vez del carácter ASCII esperado por el importador. Los índices de búsqueda, las expresiones regulares, la detección de duplicados, los nombres de archivo y las herramientas de consola también pueden reaccionar de forma distinta. El problema es aún más difícil de localizar cuando el carácter es invisible, como un guion discrecional insertado para dividir líneas. La normalización elimina esa ambigüedad sustituyendo los caracteres reconocidos por uno elegido. Las letras, cifras, espacios, signos y saltos de línea restantes no cambian, por lo que el proceso es preciso y previsible, no una reescritura tipográfica general.
Elija el estilo adecuado para el destino
Utilice el estilo de guion para identificadores, datos importados, intercambio de texto simple, claves de búsqueda, nombres de archivo, código fuente y sistemas que esperan ASCII. Es la opción más segura cuando importa más la compatibilidad que la tipografía. Elija la raya corta para textos editoriales cuyo manual de estilo la use en intervalos numéricos o relaciones, como rangos de páginas y trayectos. Elija la raya larga cuando un flujo de publicación requiera una puntuación uniforme dentro de las frases. El carácter seleccionado sustituye todos los tipos reconocidos del texto, incluidos los guiones ASCII existentes si el destino es una raya corta o larga. Este comportamiento uniforme es deliberado: la herramienta normaliza caracteres, pero no deduce si cada signo representa una palabra compuesta, una resta, un intervalo o un inciso. Esa inferencia dependería del idioma y podría alterar el significado sin aviso. Si su documento necesita estilos diferentes según la función gramatical, normalice solo las selecciones pertinentes o aplique reglas editoriales contextuales después de esta limpieza mecánica.
Use resultados deterministas en procesos de limpieza
La respuesta incluye el texto normalizado, el estilo seleccionado, el carácter de destino literal y el número de caracteres que realmente cambiaron. Un signo que ya coincide con el destino se conserva y no aumenta el contador. Esto permite usar el resultado en controles automáticos de calidad: un proceso puede rechazar tipografía inesperada, registrar cuánto material original se modificó o confirmar que una segunda pasada devuelve cero cambios. El algoritmo es determinista y no realiza solicitudes de red, detección de idioma, inteligencia artificial ni transformaciones aleatorias. Recorre una entrada de tamaño limitado y sustituye únicamente una familia documentada de caracteres Unicode similares a rayas. Los espacios se conservan a propósito; una raya rodeada de espacios mantiene esos espacios al convertirse en guion, y una raya sin espacios sigue igual. Así no se mezcla la normalización de caracteres con criterios subjetivos de espaciado. Para importaciones repetibles, ejecute esta operación antes de tokenizar, buscar coincidencias exactas, interpretar números, crear slugs o eliminar duplicados; después aplique por separado las reglas de puntuación propias de su dominio.
Qué puede hacer con ella
Limpiar identificadores importados
Convierta guiones inseparables ocultos y rayas tipográficas antes de comparar códigos de producto, referencias de cuenta o identificadores documentales.
Preparar texto simple fiable
Uniforme la puntuación copiada de PDF y documentos ofimáticos antes de enviarla a herramientas de búsqueda, validación o procesamiento de datos.
Aplicar un estilo editorial
Convierta caracteres mezclados a una única raya corta o larga antes de una revisión de estilo específica.
Preguntas frecuentes
¿Cuánto cuesta?
Puede ejecutarlo gratis en su navegador desde esta página o pagar $0.002 por cada solicitud a la API.
¿Qué estilos de salida están disponibles?
Puede convertir los caracteres reconocidos a un guion ASCII, una raya corta o una raya larga.
¿Cambia los espacios alrededor de una raya?
No. Los espacios y saltos de línea existentes se conservan exactamente; solo se sustituyen los caracteres reconocidos.
¿Decide si el signo es puntuación, intervalo o resta?
No. Realiza una normalización mecánica y no deduce significados gramaticales ni matemáticos.
¿Qué significa el número de sustituciones?
Cuenta los caracteres reconocidos cuyo punto de código original era distinto del carácter de destino elegido.
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/str/normalize-dashes \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"Pages 10–15 — revised − 2 notes"}'const res = await fetch("https://api.kit.forhosting.com/str/normalize-dashes", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "Pages 10–15 — revised − 2 notes"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/str/normalize-dashes",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "Pages 10–15 — revised − 2 notes"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/str/normalize-dashes", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"Pages 10–15 — revised − 2 notes"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"Pages 10–15 — revised − 2 notes"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/str/normalize-dashes", 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": "Pages 10–15 — revised − 2 notes"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "str.normalize_dashes",
"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_chars | 200000 |
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. |