Normalizar finales de línea
Normalice los finales de línea de un archivo, texto pegado, documento generado o fragmento de código que combine LF de Unix, CRLF de Windows y CR aislado heredado.
Ejecutar — gratis
Usted elige LF o CRLF como destino; el resultado conserva cada carácter visible y uniforma todos los límites de línea. La respuesta incluye el texto normalizado, el destino elegido y el número exacto de terminadores convertidos, para que la operación resulte verificable y fácil de automatizar.
Por qué importan unos finales de línea uniformes
Un texto puede verse idéntico en un editor y contener secuencias de bytes distintas entre sus líneas. Unix y macOS moderno suelen usar un solo avance de línea, LF, mientras Windows emplea normalmente un retorno de carro seguido de un avance de línea, CRLF. Los archivos antiguos también pueden contener CR aislados. La mezcla aparece al copiar entre aplicaciones, unir contenido generado y manual, extraer archivos o recibir aportaciones de varios sistemas operativos. Puede producir diferencias de control de versiones innecesarias, confundir herramientas de consola, bloquear importadores estrictos y cambiar sumas de comprobación aunque las palabras visibles coincidan. Esta capacidad reconoce CRLF como un único terminador, además de LF y CR aislados, y convierte las tres formas al estilo solicitado. No modifica letras, espacios, tabulaciones ni otros caracteres.
Cómo funcionan la conversión y el recuento
Introduzca el texto completo en el campo text y seleccione exactamente LF o CRLF en target. El conversor recorre el valor de principio a fin y detecta cada pareja CRLF antes de considerar caracteres aislados; así, un final de Windows nunca se cuenta dos veces. Con destino LF, cada CRLF y cada CR aislado cuentan como un cambio, mientras un LF existente permanece igual. Con destino CRLF, cambian los LF y CR aislados, pero no las parejas CRLF existentes. El valor changed cuenta terminadores convertidos, no caracteres añadidos o retirados. Sustituir CRLF por LF es un solo cambio aunque la salida sea más corta. Un texto sin saltos, uno ya conforme o una cadena vacía vuelve sin cambios y con cero. La operación es determinista: una misma entrada siempre genera el mismo resultado.
Cómo usar el resultado con seguridad
Use el texto devuelto como valor canónico para escribir un archivo, calcular un resumen, comparar revisiones, alimentar un analizador o encadenar otra capacidad. Conserve changed en los registros de migración cuando necesite demostrar la normalización: cero confirma que la entrada ya cumplía la convención y un valor positivo indica cuántos límites se reescribieron. El resultado repite target para que los pasos posteriores no dependan de una configuración externa. La herramienta no deduce una convención a partir del nombre del archivo o del sistema operativo, pues las conjeturas silenciosas dificultan las auditorías. Elija LF para repositorios y procesos Unix cuando sea su norma, o CRLF para programas y formatos que exijan límites de Windows. Un destino no admitido provoca un error. No recorta espacios, cambia tabulaciones, añade un salto final, altera la codificación ni modifica la normalización Unicode.
Qué puede hacer con ella
Limpiar código antes de confirmarlo
Convierta finales mezclados a la convención del repositorio y evite que un cambio pequeño parezca reescribir todo el archivo.
Preparar texto para un importador estricto
Genere registros con terminadores uniformes antes de enviarlos a software que solo admite LF o CRLF.
Canonizar contenido antes de resumirlo
Uniforme los límites antes de calcular sumas de comprobación para que el sistema operativo no altere el resultado.
Preguntas frecuentes
¿Qué estilos de final de línea puedo elegir?
Los destinos admitidos son LF y CRLF. Cualquier otro valor produce un error de entrada no válida.
¿Una pareja CRLF cuenta como uno o dos cambios?
Cuenta como un solo final de línea y, como máximo, un cambio. La pareja se detecta antes que los caracteres aislados.
¿La normalización añade un salto al final?
No. Solo convierte finales existentes; nunca añade ni elimina un límite de línea final.
¿Qué ocurre con los caracteres CR aislados?
Cada CR aislado se interpreta como un final de línea heredado y se convierte al estilo elegido.
¿Cuánto cuesta una solicitud de API?
Cada solicitud de API cuesta $0.002. La misma conversión determinista también puede ejecutarse en el navegador.
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/normalize-line-endings \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"first line\r\nsecond line\nthird line\rfourth line","target":"LF"}'const res = await fetch("https://api.kit.forhosting.com/data/normalize-line-endings", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "first line\r\nsecond line\nthird line\rfourth line",
"target": "LF"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/data/normalize-line-endings",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "first line\r\nsecond line\nthird line\rfourth line",
"target": "LF"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/data/normalize-line-endings", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"first line\\r\\nsecond line\\nthird line\\rfourth line","target":"LF"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"first line\r\nsecond line\nthird line\rfourth line","target":"LF"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/data/normalize-line-endings", 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": "first line\r\nsecond line\nthird line\rfourth line",
"target": "LF"
}Ejemplo de respuesta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.normalize_line_endings",
"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. |