Tiedostojen siirtämisessä FTP:llä on kaksi eri siirtomuotoa, tekstimuotoinen ("ascii") ja binaarinen (binary, "image").
Binaarinen siirto tarkoittaa datan kopiointia sellaisenaan, ja sitä käytetään mm. kuvatiedostoille, tekstinkäsittelyohjelmien omissa formaateissa oleville dokumenteille sekä käännetyille ohjelmille - ylipäänsä kaikkeen, mikä ei ole tekstiä.
Tekstimuotoinen siirto poikkeaa tästä siten, että FTP-ohjelma ehkä pyrkii tekemään merkkikoodimuunnoksen siitä merkkikoodista, joka lähdekoneessa on käytössä, siihen merkkikoodiin, joka kohdekoneessa on käytössä. Esimerkiksi tällainen siirto Ebcdic-koodia käyttävästä koneesta Unix-koneeseen merkitsisi sitä, että kunkin merkin esitys muuntuu Ebcdicin mukaisesta Asciin tai esim. ISO Latin 1:n mukaiseksi. Asioita hankaloittaa se, että merkkikoodeista on eri versioita käytössä ja että yhden järjestelmän sisälläkin voi olla eri merkkikoodeja.
FTP-ohjelma saattaa yrittää "arvata" esimerkiksi tiedostonnimen perusteella, onko parempi käyttää binaarista vai tekstisiirtoa. Arvaus menee usein pieleen, joten on parempi, että käyttäjä määrää tavan. Esim. suositussa WS_FTP-ohjelmassa on painonapit tätä varten (ASCII ja Binary).
Tekstimuotoisessa siirrossa voi myös rivinvaihtojen esitys muuttua.
Jos PC:stä siirretään tekstitiedosto esim. Unix-koneeseen,
on syytä käyttää tekstimuotoa silloinkin, kun se ei merkkikoodien takia
olisi tarpeen. Jos nimittäin siirretään
binaarimuodossa, niin tulos voi olla muutoin normaali
mutta esimerkiksi
Emacsilla
katsottaessa jokaisen rivin lopussa
näkyy ^M
. Tämä on Emacsin tapa kertoa, että siellä
on CR eli "control-M", joka on Unixissa aivan ylimääräinen merkki.
Ohjelmasta riippuu, haittaako CR, mutta ei siitä mitään hyötyäkään ole.
Jos tiedosto olisi siirretty tekstimuodossa, olisi rivinvaihdon esitys
Unixin normaali LF eikä CR LF. Mutta asian voi toki korjata
jälkikäteenkin, esimerkiksi Emacsin
korvauskäskyllä,
kontrollikoodit control-Q:lla "lainaten":
Kyseisen muunnoksen voi toki tehdä myös erilaisilla ns.
työkaluohjelmilla
Unixissa, esim. tr
-ohjelmalla näin:
tr -d '\015' < vanhatiedosto > uusitiedosto