Forskel mellem versioner af "UUencode"

1.940 bytes fjernet ,  for 15 år siden
ingen redigeringsopsummering
Uuencode er en computer[[algoritme]] der benyttes til [[dataenkapsulering]] ved at konvertere et sæt [[data]]s [[tegnsæt]] til et andet tegnsæt med det formål at undgå tegn, der kan virke forstyrrende i nogle [[protokol]]ler og [[format]]er.
Uuencode bruges til at konvertere mellem binær og ren tekst. Oprindelig blev det brugt i Unix til transmission af binær data over [[UUCP]]-mailsystemet. Uuencode har derfor sit navn fra "Unix-til-Unix encoding". Formålet med uuencode er at konvertere binær data, der kan indeholde tegn som fx et mailsystem ved uheld kan fortolke, til noget der ikke indeholder disse tegn. Det gøres ved en konvertering og udskiftning af tegnsæt. Det modsatte af '''uuencode''' er '''uudecode'''. Uuencode blev senere populært til at sende vedhæftninger i e-mail og i indlæg på [[usenet]], selvom det dog er erstattet af [[MIME]] i dag.
 
== Historie ==
==Forklaret i [[bit]]s og [[byte]]s==
Uuencode blev oprindeligt brugt i [[Unix]]-[[styresystem]]et til [[transmission]] af data over [[UUCP]]-[[E-mail|postsystemet]]. Uuencode har derfor sit navn fra "Unix-til-Unix encode". Uuencode er senere hen blevet populært i andre postsystemer og på [[Usenet]] selvom det i stort omfang er erstattet af [[Base 64]] og senere [[MIME]]. Uuencode understøttes af de fleste E-mail-programmer.
Binær data kan indeholde hvad som helst, og det er nogle gange et problem når binær data skal forsegles inde i en protokol eller anden data. Den binære data kan nemlig, foruden den betydning den har for sig selv (fx [[film]], [[lyd]]), nemlig tilfældigvis også have en betydning for formatet, der skal indeholde datæn. Det kan resultere i at den data, der skal indeholde den binære data (fx en [[e-mail]]) bliver ødelagt.
 
== Problemet i en nøddeskal ==
Uuencode løser dette problem ved at konstatere at det først og fremmest ikke er al data der ødelægger den omsluttende protokol eller format. Hvis vi kunne repræsentere den data, vores binære data egentlig indeholder, kun ved hjælp af tegn der ikke ødelægger den omsluttende data, er vi reddet. Uuencode laver dernæst en tabel over ufarlige tegn, og en procedure, eller en [[algoritme]], til at konvertere frem og tilbage. Det vigtige for den tabel er at den er mindre, så den kan ligge inden for det område i [[ASCII]]-tabellen der betegnes ufarligt.
:''Dette afsnit beskriver [[dataenkapsulering]].''
 
Netværk og Internet består i dag af mange lag (se [[OSI-model]]len) fra de fysiske ledninger og [[netværksudstyr]] frem til de protokoller som bliver håndteret af computerbrugerens programmer. Foruden de lag understøtter mange protokoller at man sender flere slags data, for eksempel vedhæftede filer i e-mails eller videosamtaler over [[chat]] hvor tekst tidligere har været den primære kommunikationsform. I protokoller og filformater hvor indre protokoller og/eller filformater forekommer, opstår et problem idet noget af det data i det indre format kan forstyrre dataet i det ydre format. Det skyldes at alt data har den samme [[måleenhed]], og at datasekvenser der har en speciel betydning i det indre data (for eksempel farven på et vedhæftet billede) kan have en betydning i det ydre data (for eksempel e-mailen), der, hvis der opstår en forvirring i form af eksempelvis tvetydighed i fortolkningen af dataet, kan korruptere den endelige besked.
 
Uuencode kan i et sådan tilfælde benyttes til at omformulere det indre data sådan at det umuligt kan indeholde datasekvenser der kan kollidere med ydre protokoller eller formater. Dette opnås ved først at finde et [[subset]] af det benyttede tegnsæt ([[ASCII]]<ref>Uuencode benytter altid, men algoritmer tilsvarende Uuencode kan opstilles til at benytte andre tegnsæt som set ved Base 64.</ref>) der ikke volder problemer – Uuencode benytter altid symbolerne i ASCII-tabellen mellem 32 og 96 fordi de alle sammen kan udskrives og findes i andre tegnsæt som [[ISO 8859]] og [[UTF-8]].
 
En anden løsning til ovenstående problem er [[escape-sekvens]]er, ofte brugt i [[programmering]]. En tredje løsning er at benytte protokoller som bruger datablokke af ens længder, sådan at man altid ved hvorvidt data skal fortolkes som det indeholdende format eller som det indeholdte.
 
== Algoritmen beskrevet ==
Uuencode kan beskrives ved følgende [[pseudokode]]:
 
===Pseudo-kode for uuencode===
Begynd
Læs 3 bytes.
Hvis der er færre,
Fyld restende sidste bits, op til tre bytes, med 0'er.
Del disse 24 bits (3 bytes) i 4 grupper med 6 bits i hver.
Betragt disse 4 grupper som henholdsvis 4 tal fra 0-63.
DecimalLæg 32 er lagt(decimal) til hverhvert af disse tal.
SkrivUdskriv hverASCII-tegnet affor dehvert 4af taldisse udtal.
Gentag indtil der ikke er mere data.
 
Denne algoritme bryder derfor datændataen op så parsæt af tre bytes bliver fordelt over fire bytes. Dette gør algoritmen ekspansiv og derfor modsat en [[komprimeringsalgoritme]]. Det betyder effektivt at data som er uuencoded fylder over 33% mere. DecimalGrunden til at 32 erbliver ikkelagt nogettil magiskhvert tal, daer fordi det i ASCII-tabellen svarer til tegnet for mellemrum (" "), hvilket betyder at hver af de fire nye bytes, der bliver skrevet, ligger i rækken 32 til (32+63=95), hvor tegn 95 er understreg ("_"). ASCII-tegn over 95 må også godt bruges, men kun de seks bits mest til højre vil blive betragtet.
 
HverEfterfølgende gruppebestår uuencode-formatet af grupper a 60 tegn (svarende til 45 input-bytes) der er adskilt med linjeskift og starter med et tegn der fortæller hvor meget data der er på linjen. Dette tegn er ofte 'M', da dette tegn svarer til ASCII-kode 77, som er lig med 32 + 45, hvor 45 er antallet af oprindelige bytes. Det plejer dog at være forskelligt på sidste linje, da mængden af bytes i det meste data ikke går op i 45.
 
Nogle gange indeholder uuencode desuden [[Accenttegn|accent grave]]-tegnet for at undgå et problem med nogle e-mail-programmer der fjerner tomme linjer i slutningen af en tekst. Accent grave, blandt andre, bliver ignoreret af Uuencode, da den ikke ligger inden for det gyldige tegnsæt. Accent grave (ASCII 96) kan desuden bruges som mellemrumstegn, da dens seks bits mest til højre svarer til det samme som tegnet for mellemrums seks bits mest til højre, 100000.
 
{| border="1" cellpadding="5" cellspacing="0" align="center"
Uuencode løser mange problemer, men der forekommer stadig nogle problemer med ældre computere som fx [[EBCDIC]] der ikke benytter ASCII-tegnsættet. [[Xxencode]] er en mere robust løsning på dette problem, da den kun benytter [[alfanumeriske]] tegn samt plus og minus.
|+'''Uddrag af ASCII-tabellen'''
 
===Tegnsæt for uuencode===
 
{| border="1" cellpadding="2" cellspacing="0"
|- valign="bottom"
!Udskrivelig<br />Repræsentation
!ASCII Decimal
!Binær<br />Representation
!
!Udskrivelig<br />Repræsentation
!ASCII Decimal
!Binær<br />Repræsentation
|-
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
| '''dec'''
| '''tegn'''
|-
| 32
|align="center"|(space)
|
|align="center"|32
| 40
|align="center"|000 000
| (
|&nbsp;
| 48
|align="center"|@
| 0
|align="center"|64
| 56
|align="center"|100 000
| 8
| 64
| @
| 72
| H
| 80
| P
| 88
| X
|-
| 33
|align="center"|!
| !
|align="center"|33
| 41
|align="center"|000 001
| )
|&nbsp;
| 49
|align="center"|A
| 1
|align="center"|65
| 57
|align="center"|100 001
| 9
| 65
| A
| 73
| I
| 81
| Q
| 89
| Y
|-
| 34
|align="center"|"
| "
|align="center"|34
| 42
|align="center"|000 010
| *
|&nbsp;
| 50
|align="center"|B
| 2
|align="center"|66
| 58
|align="center"|100 010
| :
| 66
| B
| 74
| J
| 82
| R
| 90
| Z
|-
| 35
|align="center"|#
| #
|align="center"|35
| 43
|align="center"|000 011
| +
|&nbsp;
| 51
|align="center"|C
| 3
|align="center"|67
| 59
|align="center"|100 011
| ;
| 67
| C
| 75
| K
| 83
| S
| 91
| [
|-
| 36
|align="center"|$
| $
|align="center"|36
| 44
|align="center"|000 100
| ,
|&nbsp;
| 52
|align="center"|D
| 4
|align="center"|68
| 60
|align="center"|100 100
| <
| 68
| D
| 76
| L
| 84
| T
| 92
| \
|-
| 37
|align="center"|%
| %
|align="center"|37
| 45
|align="center"|000 101
| -
|&nbsp;
| 53
|align="center"|E
| 5
|align="center"|69
| 61
|align="center"|100 101
| =
| 69
| E
| 77
| M
| 85
| U
| 93
| ]
|-
| 38
|align="center"|&
| &
|align="center"|38
| 46
|align="center"|000 110
| .
|&nbsp;
| 54
|align="center"|F
| 6
|align="center"|70
| 62
|align="center"|100 110
| >
| 70
| F
| 78
| N
| 86
| V
| 94
| ^
|-
| 39
|align="center"|'
| '
|align="center"|39
| 47
|align="center"|000 111
| /
|&nbsp;
| 55
|align="center"|G
| 7
|align="center"|71
| 63
|align="center"|100 111
| ?
| 71
| G
| 79
| O
| 87
| W
| 95
| _
|-
| 40
|align="center"|(
| (
|align="center"|40
| 48
|align="center"|001 000
| 0
|&nbsp;
| 56
|align="center"|H
| 8
|align="center"|72
| 64
|align="center"|101 000
| @
| 72
| H
| 80
| P
| 88
| X
| 96
| `
|-
| 41
|align="center"|)
| )
|align="center"|41
| 49
|align="center"|001 001
| 1
|&nbsp;
| 57
|align="center"|I
| 9
|align="center"|73
| 65
|align="center"|101 001
| A
| 73
| I
| 81
| Q
| 89
| Y
|
|
|-
| 42
|align="center"|*
| *
|align="center"|42
| 50
|align="center"|001 010
| 2
|&nbsp;
| 58
|align="center"|J
| :
|align="center"|74
| 66
|align="center"|101 010
| B
| 74
| J
| 82
| R
| 90
| Z
|
|
|-
| 43
|align="center"|+
| +
|align="center"|43
| 51
|align="center"|001 011
| 3
|&nbsp;
| 59
|align="center"|K
| ;
|align="center"|75
| 67
|align="center"|101 011
|- C
| 75
|align="center"|,
| K
|align="center"|44
| 83
|align="center"|001 100
| S
|&nbsp;
| 91
|align="center"|L
| [
|align="center"|76
|align="center"|101 100
|-
|align="center"|-
|align="center"|45
|align="center"|001 101
|&nbsp;
|align="center"|M
|align="center"|77
|align="center"|101 101
|-
|align="center"|.
|align="center"|46
|align="center"|001 110
|&nbsp;
|align="center"|N
|align="center"|78
|align="center"|101 110
|-
|align="center"|/
|align="center"|47
|align="center"|001 111
|&nbsp;
|align="center"|O
|align="center"|79
|align="center"|101 111
|-
|align="center"|0
|align="center"|48
|align="center"|010 000
|&nbsp;
|align="center"|P
|align="center"|80
|align="center"|110 000
|-
|align="center"|1
|align="center"|49
|align="center"|010 001
|&nbsp;
|align="center"|Q
|align="center"|81
|align="center"|110 001
|-
|align="center"|2
|align="center"|50
|align="center"|010 010
|&nbsp;
|align="center"|R
|align="center"|82
|align="center"|110 010
|-
|align="center"|3
|align="center"|51
|align="center"|010 011
|&nbsp;
|align="center"|S
|align="center"|83
|align="center"|110 011
|-
|align="center"|4
|align="center"|52
|align="center"|010 100
|&nbsp;
|align="center"|T
|align="center"|84
|align="center"|110 100
|-
|align="center"|5
|align="center"|53
|align="center"|010 101
|&nbsp;
|align="center"|U
|align="center"|85
|align="center"|110 101
|-
|align="center"|6
|align="center"|54
|align="center"|010 110
|&nbsp;
|align="center"|V
|align="center"|86
|align="center"|110 110
|-
|align="center"|7
|align="center"|55
|align="center"|010 111
|&nbsp;
|align="center"|W
|align="center"|87
|align="center"|110 111
|-
|align="center"|8
|align="center"|56
|align="center"|011 000
|&nbsp;
|align="center"|X
|align="center"|88
|align="center"|111 000
|-
|align="center"|9
|align="center"|57
|align="center"|011 001
|&nbsp;
|align="center"|Y
|align="center"|89
|align="center"|111 001
|-
|align="center"|:
|align="center"|58
|align="center"|011 010
|&nbsp;
|align="center"|Z
|align="center"|90
|align="center"|111 010
|-
|align="center"|;
|align="center"|59
|align="center"|011 011
|&nbsp;
|align="center"|<nowiki>[</nowiki>
|align="center"|91
|align="center"|111 011
|-
|align="center"|<
|align="center"|60
|align="center"|011 100
|&nbsp;
|align="center"|\
|align="center"|92
|align="center"|111 100
|-
|align="center"|=
|align="center"|61
|align="center"|011 101
|&nbsp;
|align="center"|<nowiki>]</nowiki>
|align="center"|93
|align="center"|111 101
|-
|align="center"|>
|align="center"|62
|align="center"|011 110
|&nbsp;
|align="center"|^
|align="center"|94
|align="center"|111 110
|-
|align="center"|?
|align="center"|63
|align="center"|011 111
|&nbsp;
|align="center"|_
|align="center"|95
|align="center"|111 111
|-
|
|
|
|&nbsp;
|align="center"|[[Grave accent|`]]
|align="center"|96
|align="center"|(1) 000 000
|}
 
{{It-stub}}
 
==Uuencode= Eksempelandreuuencoded tekst sprog===
Disse 45 tegn:
Dette er et eksempel på en uuencoded tekst..
Oversættes til disse 61 tegn (60 tegn plus det første tegn der indeholder længden af den efterfølgende streng):
M1&5T=&4@97(@970@96MS96UP96P@<.4@96X@=75E;F-O9&5D('1E:W-T+BX*
 
== Anvendelse ==
Uuencode løste mange problemer, men der forekommer stadig nogle problemer med ældre computere som fx [[EBCDIC]] der ikke benytter ASCII-tegnsættet. [[Xxencode]] er en mere robust løsning på dette problem, da den kun benytter [[alfanumerisk]]e tegn samt plus og minus. [[Base 64]] har
 
== Referencer ==
* [http://foldoc.org/?uuencode FOLDOC's forklaring af uuencode]
 
== Se også ==
* [[Base 64]]
 
[[de:UUencode]]
[[en:Uuencode]]