Normalizar finais de linha
Normalize os finais de linha quando um arquivo, texto colado, documento gerado ou trecho de código mistura LF do Unix, CRLF do Windows e CR isolado legado.
Executar grátis
Você escolhe LF ou CRLF como destino; o resultado preserva todos os caracteres visíveis e uniformiza cada limite de linha. A resposta inclui o texto normalizado, o destino selecionado e a contagem exata dos terminadores convertidos, facilitando a conferência e a automação do processo.
Por que finais de linha consistentes importam
Um texto pode parecer idêntico no editor e ainda conter sequências de bytes diferentes entre as linhas. Unix e macOS moderno normalmente usam um único avanço de linha, LF, enquanto o Windows costuma empregar retorno de carro seguido de avanço de linha, CRLF. Arquivos antigos também podem trazer CR isolado. A mistura surge ao copiar entre aplicativos, combinar conteúdo gerado e manual, extrair arquivos ou receber contribuições de sistemas operacionais diversos. Isso gera diferenças ruidosas no controle de versão, confunde ferramentas de terminal, interrompe importadores rigorosos e altera checksums mesmo quando as palavras visíveis são iguais. Esta capacidade reconhece CRLF como um terminador único, além de LF e CR isolados, e converte as três formas ao padrão solicitado. Letras, espaços, tabulações e demais caracteres não são reformados.
Como funcionam a conversão e a contagem
Informe o texto completo no campo text e selecione exatamente LF ou CRLF em target. O conversor percorre o conteúdo do início ao fim e identifica cada par CRLF antes de considerar caracteres isolados, impedindo que um final do Windows seja contado duas vezes. Para o destino LF, cada CRLF e cada CR isolado contam como uma alteração; um LF existente fica intacto. Para CRLF, mudam LF e CR isolados, enquanto pares CRLF existentes permanecem iguais. O valor changed contabiliza terminadores convertidos, não caracteres inseridos ou removidos. Trocar CRLF por LF representa uma mudança, embora a saída fique um caractere menor. Texto sem quebra, já adequado ou vazio retorna sem alteração e com zero. Como a operação é determinística, entradas idênticas sempre produzem saídas idênticas.
Como usar o resultado com segurança
Use o texto retornado como valor canônico para gravar um arquivo, calcular um hash, comparar revisões, alimentar um analisador ou chamar outra capacidade. Guarde changed nos registros de migração quando precisar comprovar a normalização: zero confirma que a entrada já obedecia ao padrão, e um valor positivo informa quantos limites foram reescritos. O resultado repete target para que etapas posteriores não dependam de configurações externas. A ferramenta não adivinha a convenção com base no nome do arquivo ou no sistema operacional, pois suposições silenciosas dificultam auditorias. Escolha LF para repositórios e processos Unix quando essa for a regra, ou CRLF para programas e formatos que exigem limites do Windows. Um destino incompatível gera erro. A normalização não remove espaços finais, altera tabulações, adiciona quebra final, muda codificação nem reescreve formas Unicode.
Casos de uso
Limpar código antes do commit
Converta finais misturados ao padrão do repositório para uma pequena edição não parecer a regravação do arquivo inteiro.
Preparar texto para importação rigorosa
Produza registros com terminadores consistentes antes de enviá-los a um programa que aceita somente LF ou CRLF.
Canonizar conteúdo antes do hash
Uniformize os limites antes de calcular checksums para que diferenças do sistema operacional não alterem o resumo.
Perguntas frequentes
Quais estilos de final de linha posso escolher?
Os destinos aceitos são LF e CRLF. Qualquer outro valor causa um erro de entrada inválida.
Um par CRLF conta como uma ou duas alterações?
Ele conta como um único final de linha e, no máximo, uma alteração. O par é reconhecido antes dos caracteres isolados.
A normalização adiciona uma quebra no final?
Não. Ela converte somente finais existentes e nunca adiciona nem remove o limite de linha final.
O que acontece com caracteres CR isolados?
Cada CR isolado é tratado como final de linha legado e convertido para o estilo selecionado.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. A mesma conversão determinística também pode ser executada no navegador.
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
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)Exemplo de requisição
{
"text": "first line\r\nsecond line\nthird line\rfourth line",
"target": "LF"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "data.normalize_line_endings",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Limites
max_mb | 25 |
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |