Kapitel 11. Konvertering av data

Innehållsförteckning

11.1. Verktyg för konvertering av textdata
11.1.1. Konvertera en textfil med iconv
11.1.2. Kontrollerar att filen är UTF-8 med iconv
11.1.3. Konvertera filnamn med iconv
11.1.4. EOL-konvertering
11.1.5. TAB-konvertering
11.1.6. Redaktörer med automatisk konvertering
11.1.7. Extrahering av vanlig text
11.1.8. Markera och formatera data i klartext
11.2. XML-data
11.2.1. Grundläggande tips för XML
11.2.2. XML-bearbetning
11.2.3. Extrahering av XML-data
11.2.4. XML-data lint
11.3. Inställning av typ
11.3.1. roff sättning
11.3.2. TeX/LaTeX
11.3.3. Skriv ut en manuell sida
11.3.4. Skapa en manuell sida
11.4. Utskrivbara data
11.4.1. Ghostscript
11.4.2. Slå samman två PS- eller PDF-filer
11.4.3. Verktyg för utskrivbara data
11.4.4. Skriva ut med CUPS
11.5. Konvertering av postdata
11.5.1. Grunderna för e-postdata
11.6. Grafiska dataverktyg
11.6.1. Grafiska dataverktyg (metapaket)
11.6.2. Grafiska dataverktyg (GUI)
11.6.3. Grafiska dataverktyg (CLI)
11.7. Diverse datakonvertering

Verktyg och tips för att konvertera dataformat på Debian-systemet beskrivs.

Standardbaserade verktyg är i mycket gott skick, men stödet för proprietära dataformat är begränsat.

Följande paket för konvertering av textdata fångade min uppmärksamhet.


[Tips] Tips

iconv(1) tillhandahålls som en del av libc6-paketet och är alltid tillgängligt på praktiskt taget alla Unix-liknande system för att konvertera kodningen av tecken.

Du kan konvertera kodningar i en textfil med iconv(1) på följande sätt.

$ iconv -f encoding1 -t encoding2 input.txt >output.txt

Kodningsvärdena är skiftlägesokänsliga och ignorerar "-" och "_" vid matchning. Kodningar som stöds kan kontrolleras med kommandot "iconv -l".


[Notera] Notera

Vissa kodningar stöds endast för datakonvertering och används inte som lokala värden (Avsnitt 8.1, ”Lokalen”).

För teckenuppsättningar som ryms i en enda byte, t.ex. ASCII- och ISO-8859-teckenuppsättningar, betyder teckenkodningen nästan samma sak som teckenuppsättningen.

För teckenuppsättningar med många tecken, t.ex. JIS X 0213 för japanska eller Universal Character Set (UCS, Unicode, ISO-10646-1 ) för praktiskt taget alla språk, finns det många kodningsscheman för att passa in dem i byte-datasekvensen.

För dessa finns det tydliga skillnader mellan teckenuppsättning och teckenkodning.

Kodsidan används som synonym till teckenkodningstabellerna för vissa leverantörsspecifika tabeller.

[Notera] Notera

Observera att de flesta kodningssystem delar samma kod med ASCII för 7-bitars tecken. Men det finns några undantag. Om du konverterar gamla japanska C-program och URL-data från kodningsformatet shift-JIS till UTF-8-format ska du använda "CP932" som kodningsnamn i stället för "shift-JIS" för att få förväntat resultat: 0x5C → "\" och 0x7E → "~". Annars konverteras dessa till fel tecken.

[Tips] Tips

recode(1) kan också användas och erbjuder mer än den kombinerade funktionaliteten hos iconv(1), fromdos(1), todos(1), frommac(1) och tomac(1). För mer information, se "info recode".

Intelligenta moderna editorer som vim-programmet är ganska smarta och klarar sig bra med alla kodningssystem och alla filformat. För bästa kompatibilitet bör du använda dessa redigeringsprogram i UTF-8-lokalen i en UTF-8-kompatibel konsol.

En gammal västeuropeisk Unix-textfil, "u-file.txt", som lagras i kodningen latin1 (iso-8859-1) kan redigeras enkelt med vim på följande sätt.

$ vim u-file.txt

Detta är möjligt eftersom den automatiska detekteringsmekanismen för filkodningen i vim först antar UTF-8-kodningen och, om den misslyckas, antar att den är latin1.

En gammal polsk Unix-textfil, "pu-file.txt", som lagras i kodningen latin2 (iso-8859-2) kan redigeras med vim på följande sätt.

$ vim '+e ++enc=latin2 pu-file.txt'

En gammal japansk unix-textfil, "ju-file.txt", som lagrats i eucJP-kodning kan redigeras med vim på följande sätt.

$ vim '+e ++enc=eucJP ju-file.txt'

En gammal japansk MS-Windows textfil, "jw-file.txt", lagrad i den s.k. shift-JIS-kodningen (mer exakt: CP932) kan redigeras med vim på följande sätt.

$ vim '+e ++enc=CP932 ++ff=dos jw-file.txt'

När en fil öppnas med flaggorna "++enc" och "++ff", lagrar ":w" i Vims kommandorad den i originalformat och skriver över originalfilen. Du kan också ange sparformatet och filnamnet i kommandoraden i Vim, t,ex, ":w ++enc=utf8 new.txt".

Se mbyte.txt "multi-byte text support" i vim on-line help och Tabell 11.2, ”Lista över kodningsvärden och deras användning” för lokala värden som används med "++enc".

Programfamiljen emacs kan utföra motsvarande funktioner.

XML (Extensible Markup Language) är ett märkspråk för dokument som innehåller strukturerad information.

Se inledande information på XML.COM.

XML-text ser ut ungefär som HTML. Det gör det möjligt för oss att hantera flera format för utdata för ett dokument. Ett enkelt XML-system är docbook-xsl-paketet, som används här.

Varje XML-fil börjar med en standard XML-deklaration enligt följande.

<?xml version="1.0" encoding="UTF-8"?>

Den grundläggande syntaxen för ett XML-element märks upp enligt följande.

<name attribute="value">content</name>

XML-element med tomt innehåll märks upp i följande korta form.

<name attribute="value" />

Attributet "attribute="value"" i exemplen ovan är valfritt.

Kommentarsfältet i XML är markerat enligt följande.

<!-- comment -->

Förutom att lägga till markeringar kräver XML en mindre konvertering av innehållet med hjälp av fördefinierade enheter för följande tecken.


[Observera] Observera

"<" eller "&" kan inte användas i attribut eller element.

[Notera] Notera

När användardefinierade entiteter i SGML-stil, t.ex. "&some-tag;", används, vinner den första definitionen över de andra. Entitetsdefinitionen uttrycks i "<!ENTITY some-tag "entitetsvärde">".

[Notera] Notera

Så länge XML-markeringen görs konsekvent med en viss uppsättning taggnamn (antingen vissa data som innehåll eller attributvärde), är konvertering till en annan XML en trivial uppgift med hjälp av Extensible Stylesheet Language Transformations (XSLT).

Det finns många verktyg för att bearbeta XML-filer, t.ex. Extensible Stylesheet Language (XSL).

När du har skapat en välformad XML-fil kan du konvertera den till valfritt format med hjälp av Extensible Stylesheet Language Transformations (XSLT).

XSL-FO (Extensible Stylesheet Language for Formatting Objects) är tänkt att vara en lösning för formatering. Paketet fop är nytt i Debians main arkiv på grund av dess beroende av programspråket Java. Så LaTeX-koden genereras vanligtvis från XML med hjälp av XSLT och LaTeX-systemet används för att skapa utskrivbara filer som DVI, PostScript och PDF.


Eftersom XML är en delmängd av Standard Generalized Markup Language (SGML) kan det bearbetas med de omfattande verktyg som finns för SGML, t.ex. Document Style Semantics and Specification Language (DSSSL).


[Tips] Tips

GNOME:s yelp är ibland praktiskt för att läsa DocBook XML-filer direkt eftersom den återges hyfsat på X.

Unix-programmet troff, som ursprungligen utvecklades av AT&T, kan användas för enkel sättning. Det används vanligtvis för att skapa manpages.

TeX, som skapades av Donald Knuth, är ett mycket kraftfullt verktyg för typsättning och är de facto-standarden. LaTeX, som ursprungligen skrevs av Leslie Lamport, ger tillgång till TeX:s kraft på hög nivå.


Traditionellt är roff det huvudsakliga textbehandlingssystemet i Unix. Se roff(7), groff(7), groff(1), grotty(1), troff(1), groff_mdoc(7), groff_man(7), groff_ms(7), groff_me(7), groff_mm(7) och "info groff".

Du kan läsa eller skriva ut en bra handledning och referens om "-me" -makro i "/usr/share/doc/groff/" genom att installera groff-paketet.

[Tips] Tips

"groff -Tascii -me -" ger ut vanlig text med ANSI escape-kod. Om du vill få ut manpage-liknande utdata med många "^H" och "_", använd "GROFF_NO_SGR=1 groff -Tascii -me-" istället.

[Tips] Tips

Om du vill ta bort "^H" och "_" från en textfil som genererats av groff filtrerar du den med "col -b -x".

Programvarudistributionen TeX Live erbjuder ett komplett TeX-system. Metapaketet texlive innehåller ett anständigt urval av TeX Live-paketen som bör räcka för de vanligaste uppgifterna.

Det finns många referenser tillgängliga för TeX och LaTeX.

  • HOWTO för teTeX: Den lokala guiden för Linux-teTeX

  • tex(1)

  • latex(1)

  • texdoc(1)

  • texdoctk(1)

  • "The TeXbook", av Donald E. Knuth, (Addison-Wesley)

  • "LaTeX - A Document Preparation System", av Leslie Lamport, (Addison-Wesley)

  • "The LaTeX Companion", av Goossens, Mittelbach, Samarin, (Addison-Wesley)

Detta är den mest kraftfulla sättningsmiljön. Många SGML-processorer använder detta som sin backend-textprocessor. Lyx som tillhandahålls av lyxpaketet och GNU TeXmacs som tillhandahålls av texmacs-paketet erbjuder en trevlig WYSIWYG-redigeringsmiljö för LaTeX medan många använder Emacs och Vim som val för källredigeraren.

Det finns många tillgängliga resurser på nätet.

När dokumenten blir större kan TeX ibland orsaka fel. Du måste öka poolstorleken i "/etc/texmf/texmf.cnf" (eller mer lämpligt redigera "/etc/texmf/texmf.d/95NonPath" och köra update-texmf(8)) för att åtgärda detta.

[Notera] Notera

TeX-källan till "The TeXbook" finns tillgänglig på www.ctan.org tex-archive site for texbook.tex. Denna fil innehåller de flesta av de nödvändiga makron. Jag har hört att man kan bearbeta detta dokument med tex(1) efter att ha kommenterat raderna 7 till 10 och lagt till "\input manmac \proofmodefalse". Det rekommenderas starkt att köpa den här boken (och alla andra böcker av Donald E. Knuth) i stället för att använda onlineversionen, men källan är ett bra exempel på TeX-inmatning!

Utskrivbara data uttrycks i PostScript-format på Debian-systemet. CUPS (Common Unix Printing System) använder Ghostscript som backendprogram för rastrering för icke-PostScript-skrivare.

Utskrivbara data kan också uttryckas i PDF-format på det senaste Debian-systemet.

PDF-filer kan visas och dess formulärposter kan fyllas i med hjälp av GUI-visningsprogram som Evince och Okular (se Avsnitt 7.4, ”GUI-applikationer”) och moderna webbläsare som Chromium.

PDF-filer kan redigeras med hjälp av vissa grafikverktyg som LibreOffice, Scribus och Inkscape (se Avsnitt 11.6, ”Grafiska dataverktyg”).

[Tips] Tips

Du kan läsa en PDF-fil med GIMP och konvertera den till PNG-format med en upplösning på mer än 300 dpi. Detta kan användas som en bakgrundsbild för LibreOffice för att producera en önskvärd ändrad utskrift med minsta möjliga ansträngning.

Du kan slå samman två PostScript (PS) - eller Portable Document Format (PDF) -filer med hjälp av gs(1) i Ghostscript.

$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pswrite -sOutputFile=bla.ps -f foo1.ps foo2.ps
$ gs -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite -sOutputFile=bla.pdf -f foo1.pdf foo2.pdf
[Notera] Notera

PDF, som är ett allmänt använt utskriftsformat för flera plattformar, är i huvudsak det komprimerade PS-formatet med några ytterligare funktioner och tillägg.

[Tips] Tips

För kommandoraden är psmerge(1) och andra kommandon från psutils-paketet användbara för att manipulera PostScript-dokument. pdftk(1) från pdftk-paketet är också användbart för att manipulera PDF-dokument.

Jag fick upp ögonen för följande paket för utskriftsvänliga dataverktyg.


Kommandona lp(1) och lpr(1) som erbjuds av Common Unix Printing System (CUPS) ger möjlighet till anpassad utskrift av utskrivbara data.

Du kan skriva ut 3 kopior av en fil som är sorterad med hjälp av något av följande kommandon.

$ lp -n 3 -o Collate=True filename
$ lpr -#3 -o Collate=True filename

Du kan anpassa skrivarfunktionen ytterligare genom att använda skrivaralternativ som "-o number-up=2", "-o page-set=even", "-o page-set=odd", "-o scaling=200", "-o natural-scaling=200", etc., som finns dokumenterade i Command-Line Printing and Options.

Följande paket för konvertering av postdata fångade min uppmärksamhet.


[Tips] Tips

IMAP4-servern ( Internet Message Access Protocol version 4) kan användas för att flytta ut e-post från proprietära e-postsystem om e-postklientprogrammet kan konfigureras så att det också använder IMAP4-servern.

Mail(SMTP) bör begränsas till serier av 7-bitarsdata. Binärdata och 8-bitars textdata kodas därför till 7-bitarsformat med hjälp av MIME (Multipurpose Internet Mail Extensions) och val av teckenuppsättning (se Tabell 11.2, ”Lista över kodningsvärden och deras användning”).

Standardlagringsformatet för e-post är mbox formaterat enligt RFC2822 (uppdaterad RFC822). Se mbox(5) (tillhandahålls av mutt-paketet ).

För europeiska språk används vanligtvis "Content-Transfer-Encoding: quoted-printable" med teckenuppsättningen ISO-8859-1 för e-post eftersom det inte finns så många 8-bitars tecken. Om europeisk text är kodad i UTF-8 kommer sannolikt "Content-Transfer-Encoding: quoted-printable" att användas eftersom det mestadels är 7-bitarsdata.

För japanska används traditionellt "Content-Type: text/plain; charset=ISO-2022-JP" för e-post för att hålla texten i 7 bitar. Men äldre Microsoft-system kan skicka e-postdata i Shift-JIS utan korrekt deklaration. Om japansk text kodas i UTF-8 kommer Base64 sannolikt att användas eftersom den innehåller många 8-bitarsdata. Situationen för andra asiatiska språk är liknande.

[Notera] Notera

Om dina e-postdata som inte är Unix är tillgängliga för en klientprogramvara som inte är Debian och som kan prata med IMAP4-servern, kan du kanske flytta ut dem genom att köra din egen IMAP4-server.

[Notera] Notera

Om du använder andra lagringsformat för e-post är det ett bra första steg att flytta dem till mbox-format. Ett mångsidigt klientprogram som mutt(1) kan vara praktiskt för detta.

Du kan dela upp innehållet i brevlådan till varje meddelande med procmail(1) och formail(1).

Varje e-postmeddelande kan packas upp med munpack(1) från mpack-paketet (eller andra specialiserade verktyg) för att få fram det MIME-kodade innehållet.

Även om GUI-program som gimp(1) är mycket kraftfulla, är kommandoradsverktyg som imagemagick(1) ganska användbara för att automatisera bildmanipulering via skript.

De facto bildfilformat för digitalkameror är EXIF ( Exchangeable Image File Format ), som är JPEG-bildfilformatet med ytterligare metadatataggar. Det kan innehålla information som datum, tid och kamerainställningar.

Patentet för den förlustfria datakomprimeringen Lempel-Ziv-Welch (LZW) har löpt ut. GIF-verktyg (Graphics Interchange Format) som använder LZW-komprimeringsmetoden är nu fritt tillgängliga på Debian-systemet.

[Tips] Tips

Alla digitalkameror eller skannrar med flyttbara inspelningsmedia fungerar med Linux via USB-lagringsläsare eftersom de följer designregeln för kamerafilsystem och använder FAT-filsystem. Se Avsnitt 10.1.7, ”Flyttbar lagringsenhet”.

Följande paket för datakonvertering, redigering och organisationsverktyg för GUI-grafik fångade min uppmärksamhet.

Tabell 11.18. Lista över verktyg för grafikdata (GUI)

paket popcon storlek sökord beskrivning
gimp V:45, I:232 32135 bild(bitmap) GNU-program för bildmanipulering
xsane V:10, I:135 1512 bild(bitmap) GTK-baserad X11-frontend för SANE (Scanner Access Now Easy)
scribus V:1, I:14 32052 ps/pdf/SVG/… Scribus DTP-editor
libreoffice-draw V:92, I:434 10985 bild(vektor) LibreOffice kontorspaket - ritning
inkscape V:12, I:86 113183 bild(vektor) SVG-redigerare (skalbar vektorgrafik)
dia V:1, I:19 4086 bild(vektor) diagramredigerare (Gtk)
xfig V:0, I:9 8511 bild(vektor) Möjlighet till interaktiv generering av siffror enligt X11
gocr V:0, I:4 549 bild→text gratis OCR-programvara
eog V:35, I:176 10310 bild(Exif) Ögon av GNOME grafikvisare program
gthumb V:3, I:13 5152 bild(Exif) bildvisare och webbläsare (GNOME)
geeqie V:3, I:12 2982 bild(Exif) bildvisare med GTK
shotwell V:15, I:255 6334 bild(Exif) digital fotoorganisator (GNOME)
gwenview V:39, I:119 5988 bild(Exif) bildvisare (KDE)
kamera I:118 982 bild(Exif) stöd för digitalkamera för KDE-applikationer
digikam V:1, I:9 302 bild(Exif) program för hantering av digitala foton för KDE
darktable V:4, I:12 35873 bild(Exif) virtuellt ljusbord och mörkrum för fotografer
hugin V:0, I:6 6489 bild(Exif) panorama foto stitcher
librecad V:1, I:15 9100 DXF, ... 2D CAD-dataredigerare
freecad I:20 110 DXF, ... 3D CAD-dataredigerare
blender V:3, I:24 92911 blend, TIFF, VRML, … 3D-innehållsredigerare för animering etc
mm3d V:0, I:0 4123 ms3d, obj, dxf, … OpenGL-baserad 3D-modellredigerare
fontforge V:0, I:6 4058 ttf, ps, … fontredigerare för PS-, TrueType- och OpenType-teckensnitt
xgridfit V:0, I:0 878 ttf program för gridfitting och hintning av TrueType-teckensnitt

Följande paket för CLI-verktyg för konvertering, redigering och organisering av grafikdata fångade min uppmärksamhet.

Tabell 11.19. Lista över verktyg för grafikdata (CLI)

paket popcon storlek sökord beskrivning
imagemagick I:295 77 bild(bitmap) bildbehandlingsprogram
graphicsmagick V:1, I:9 5816 bild(bitmap) bildmanipuleringsprogram (gaffel av imagemagick)
netpbm V:27, I:305 8433 bild(bitmap) verktyg för grafisk konvertering
libheif-examples V:0, I:3 412 heif→jpeg(bitmap) konvertera HEIF (High Efficiency Image File Format) till JPEG-, PNG- eller Y4M-format med kommandot heif-convert(1)
icoutils V:4, I:36 221 png↔ico(bitmapp) konvertera MS Windows-ikoner och markörer till och från PNG-format(favicon.ico)
pstoedit V:1, I:43 1076 ps/pdf→bild(vektor) Konvertera PostScript- och PDF-filer till redigerbar vektorgrafik (SVG)
libwmf-bin V:4, I:92 151 Fönster/bild(vektor) Verktyg för konvertering av Windows-metafiler (vektorgrafikdata)
fig2sxd V:0, I:0 151 fig→sxd(vektor) konvertera XFig-filer till OpenOffice.org Draw -format
unpaper V:1, I:17 417 bild→bild verktyg för efterbehandling av skannade sidor för OCR
tesseract-ocr V:7, I:33 2279 bild→text gratis OCR-programvara baserad på HP:s kommersiella OCR-motor
tesseract-ocr-eng V:7, I:33 4032 bild→text OCR-motordata: tesseract-ocr-språkfiler för engelsk text
ocrad V:0, I:2 599 bild→text gratis OCR-programvara
exif V:2, I:53 335 bild(Exif) kommandoradsverktyg för att visa EXIF-information i JPEG-filer
exiv2 V:1, I:21 427 bild(Exif) Verktyg för hantering av EXIF/IPTC-metadata
exiftran V:0, I:12 81 bild(Exif) omvandla digitalkamerans jpeg-bilder
exiftags V:0, I:3 309 bild(Exif) verktyg för att läsa Exif-taggar från en JPEG-fil från en digitalkamera
exifprobe V:0, I:2 502 bild(Exif) läsa metadata från digitala bilder
dcraw V:0, I:8 428 bild(Raw)→ppm avkoda råa digitalkamerabilder
findimagedupes V:0, I:1 76 bild→fingeravtryck hitta visuellt liknande eller duplicerade bilder
ale V:0, I:0 818 bild→bild sammanfoga bilder för att öka återgivningen eller skapa mosaiker
imageindex V:0, I:1 143 bild(Exif)→html generera statiska HTML-gallerier från bilder
outguess V:0, I:1 230 jpeg,png universellt steganografiskt verktyg
jpegoptim V:0, I:6 59 jpeg optimera JPEG-filer
optipng V:2, I:44 187 png optimera PNG-filer, förlustfri komprimering
pngquant V:1, I:10 62 png optimera PNG-filer, förlustfri komprimering

Det finns många andra program för konvertering av data. Följande paket fångade mina ögon med hjälp av regex "~Guse::converting" i aptitude(8) (se Avsnitt 2.2.6, ”Sök metodalternativ med aptitude”).


Du kan också extrahera data från RPM-format med följande.

$ rpm2cpio file.src.rpm | cpio --extract