AppleScript: konvertera filer till UTF-8

Tråden skapades och har fått 17 svar. Det senaste inlägget skrevs .
1

Nedanstående skript är från Taz_1999, förutom mittersta partiet där man gör saker med varje fil:

tell application "TextEdit"
activate
open file listitem
save in listitem as UTF - 8

end tell

Hur adresserar till/pekar jag på varje fil i som är aktuell för bearbetning?

fel: the variable listitem is not defined

Jag är van vid en for while situation då man har en räknare som t ex
while i<=listitems; i++
men så fungerar det ju inte här...

Ola/Taz?? Hjälp...

---------------------------------------------
-- En applet av detta manus som du släpper saker på reagerar på detta:
-- Dvs drag och drop-funktionalitet kräver denna handler
on open fileList
parseFiles(fileList) of me
end open

-- En applet av detta manus reagerar på detta om du öppnar den
-- eller klickar på play i manusredigeraren
on run
set theFolderToParse to choose folder with prompt "Välj en mapp"
parseFolder(theFolderToParse)
end run

-- Här hanteras alla objekt i en mapp, mappar och filer
on parseFiles(fileList)
tell application "Finder"
repeat with listItems in fileList
if kind of listItems is "mapp" then
-- Mappar skickas till en handler för mappar
set theFolderToParse to listItems
parseFolder(theFolderToParse) of me
else
-- Här gör du saker med varje fil

tell application "TextEdit"
activate
open file listitem
save in listitem as UTF - 8

end tell
end if
end repeat
end tell
end parseFiles

-- Handlern för mappar
on parseFolder(theFolderToParse)
-- Här gör du saker med varje folder, tex detta:
tell application "Finder"
-- Skicka en lista på alla objekt i mappen till
-- handlern för mappar och filer
set newFileList to the items of theFolderToParse
parseFiles(newFileList) of me
end tell
end parseFolder
---------------------------------------------

Du har stavat fel på ordet listitems.

Sedan kommer du att få ett fel till, du behöver inte ange ordet "file" i open-kommandot i TextEdit. Läs diskussionen jag och Ylan hade om datatyper i Applescript.

http://99mac.com/forum/showthread.php?s=&threadid=25147

/Ola

Tack för hjälpen Ola.

Nu fungerar det inte att spara filerna som jag vill... Jag har kommit fram till att jag de måste sparas som "Windows Latin 1", för att de ska vara direkt användbara på en webserver. men det står inte i min makt att spara dem på det sättet...

Jag testade även med det förra skriptet i förra tråden att spara dem direkt från strängen via MacOS som skriver en fil enligt Richard Rönnbecks lösning, men då blir det antigen Mac Roman, eller kan man använda "as Unicode Text" vilket ger mycket märkliga filer med mellanslag (blank space) mellan varje tecken. Jag måste hitta ett bra sätt att konvertera filerna till kodtabell Windows Latin 1.... Idéer?

Några idéer

-- Här gör du saker med varje fil
tell application "TextEdit"

activate
open listItems with application

-- detta funkar inte:
save in listItems as "Windows latin 1"
end tell

I TextEdit är det inte möjligt att sätta den parametern. Den finns inte med i ordlistan i alla fall. Tror att den "type" som refereras till gäller om det är RTF eller TXT som dokumentet skall sparas i, men mina experiment ger inget tydligt resultat.

Kolla in ordlistan i den fulla versionen av BB Edit istället.

http://www.barebones.com/

/Ola

Det dumma är att det går utmärkt att spara som Windows latin 1 i TextEdit om man gör det för hand. Jag har suttit och pillat ett bra tag med BBedit nu utan resultat, jag kan inte hitta ISO Latin 1 eller Windows latin 1 utan bara MS-DOS text i BBE... nu börjar jag bli riktigt frustrerad... Har kollat i Word och Dreamweaver också...

Finns det inget sätt qatt få MacOS att skriva ner stringen som ISO Latin 1 direkt från början?

Applescript stöder sällan varenda sak man kan göra i GUI't i ett program.

Jag antar att det är fulla versionen av BB Edit du testar med, Lite-versionen har inte stöd för Applescript tror jag.

Vad är ditt egentliga problem? Om du skall få åäö att fungera på PC så skall du köra med RTF, där fungerar det direkt, utan pill. Så vad försöker du egentligen göra?

/Ola

Jag vet inte hur jag sparar RTF-filer, men har ändå testat med en "handgjord" RTF-fil och det fungerar tyvärr inte.

Filerna ska inkluderas på en webbsida, som en bildtext.

Windows latin 1/UNICODE Latin 1 kan man tydligen glömma.

Det bästa är att köra det "gamla" skriptet och spara ner strängen direkt med tillägget "as unicode text", fast tyvärr försvinner accenter i efternamn o dyligt...
ÅÄÖ klarar sig däremot... och Unicode levereras på rätt sätt i när sidan serveras till både Mac- o Win-webbläsare...

Däremot funkar inte Mac Roman eller RTF. UTF-8 hade varit "fett" eftersom man kan köra utf8_decode($string) i PHP. Dessutom finns då accenter o sådant kvar så vitt jag kunnat se...

nu kör jag så här och använder Unicode filen direkt som den är:
---------------------------------------
-- spara informationen som textfil
set theData to extractedText as Unicode text
set fileRef to (open for access file (thePath & myFileNameB & ".txt") with write permission)
set eof fileRef to 0
write theData to fileRef
close access fileRef
---------------------------------------

jag är inte säker på att accenter försvinner i unicode, det visade sig att det ställe jag lade märke till inte skulle ha någon accent trots allt... Just nu verkar mitt projekt ha nått dit jag ville...

Fast det hade ju gått snabbare att göra det här för hand (ett par timmar jämfört med 3 dagar)... Då hade jag i o f s dött av leda och frustration över löjligt klickande och pekande, bytande av fönster och program... Nu får jag se den här tidsåtgången som en investering i F&U inför framtiden...

Har du testat texteditorn TexEdit Plus?

Den spar och konverterar mellan alla möjliga textformat.

Tex-Edit Plus

ska kolla in den, tack Anders

om ni är nyfikna är materilet utlagt häroffentliga rummet

Så vitt jag kan se är bildtexterna ok...

Misstänkte nästan att du försöker lösa fel problem. Du får inte under några omständigheter använda dig av åäö i HTML-koden på en webbsida. Så är det bara.

Att försöka krångla om något felaktigt från början så att det bara fungerar på PC är ingen bra idé helt enkelt. Alla krumelurer i html-kod skall vara US ASCII.

Vad du försöker göra är alltså att skriva åäö i en textfil och lägga över det på en webbserver och inkludera filen direkt i en webbsida så att åäö syns i HTML-koden. Genom att koda om åäö till Windows, hoppas du att det skall fungera. Det är att lösa fel problem.

Vad du skall göra är att:
* Konvertera alla åäö och andra krumerlurer till korrekta html-motsvarigheter: åäö
* Spara det som en fil med filändelsen txt eller html
* Inkludera föregående punkts filer i din webbsida.

Här är något att utgå ifrån:

on replace_chars(this_text, search_string, replacement_string)
	set AppleScript's text item delimiters to the search_string
	set the item_list to every text item of this_text
	set AppleScript's text item delimiters to the replacement_string
	set this_text to the item_list as string
	set AppleScript's text item delimiters to ""
	return this_text
end replace_chars

Du lägger in den som subrutin i ditt script och kan då "mata den" med en textsträng med å, ä och ö i enligt nedanstående och då få tillbaka html-kod på rätt ställen. Du ropar på den genom att använda dig av något i stil med följande:

on replace_chars(this_text, search_string, replacement_string)
	set AppleScript's text item delimiters to the search_string
	set the item_list to every text item of this_text
	set AppleScript's text item delimiters to the replacement_string
	set this_text to the item_list as string
	set AppleScript's text item delimiters to ""
	return this_text
end replace_chars

on run
	set this_text to "En teckenträng med åäö och ÅÄÖ i!"
	set this_text to replace_chars(this_text, "å", "x")
	set this_text to replace_chars(this_text, "ä", "y")
	set this_text to replace_chars(this_text, "ö", "z")
	set this_text to replace_chars(this_text, "Å", "X")
	set this_text to replace_chars(this_text, "Ä", "Y")
	set this_text to replace_chars(this_text, "Ö", "Z")
end run

Tänk på att dels så kan det finnas flera krumerlurer á é osv och dels så behöver du, när du lägger in subrutiner (eller handlers som de kallas) i ett Applescript så måste du omge huvudscriptet med "on run" och "end run". Det är det som står inuti "on run" som Applescript kör när du klickar på play.

Tillägg: OBS: Eftersom vBullentin översätter mina html-kodsnuttar så har jag ändrat manuset lite (och dessutom bifogat det med detta meddelande). Så x, y, z, X, Y, Z i koden ovan skall alltså ersättas med html-motsvarigheterna för åäö. å är tex & a r i n g ; (utan alla mellanslag då).
/Ola

Mitt script:

I BB Edit finns även en massa Applscript-grejer för att göra om text till html (och då ta bort krumelurer och ersätta dem med sina html-motsvarigheter).

/Ola

Det är ett fantastiskt fint skript, jag är imponerad.

I PHP-sammanhang finns det faktiskt en fin fisk som löser det här utan några problem htmlentities($MyString);

exempel:
$MyString="en massa text & sånt med Å Ä Ö å ä ö"
$converted= htmlentities($MyString);

echo $MyString;
echo "<BR>";
echo $converted;

generar följande HTML-kod:
en massa text & sånt med Å Ä Ö å ä ö<BR>en massa text & sånt med Å Ä Ö å ä ö
(äsch det går ju inte att visa här...)

hur som: Därför tycker jag bäst om att spara textfiler på det sättet eftersom om man ska redigera filen, skriver man helt vanligt utan specialtecken som "& a r i n g ;"

Att jämföra PHP och Applescript är väl lite som att jämföra Äpplen och Apelsiner. De har inte riktigt samma syfte.

I Lasso (som hör till samma kategorier av programvaror som PHP), så behöver man oftast inte översätta från åäö till HTML, det görs automatiskt och om man vill heter det:

[Encode_HTML:_'Textsträng med åäö']

/Ola

Får man ta en fråga som är lite off topic?

Hur är det med svenska tecken när man matar in keywords och metadata?

När jag använder DWs inbyggda inmatningsfönster för keywords så sker ingen omvandling av dessa tecken vilket ju sker när man matar in vanlig text på en sida.

jag försöker lösa ett problem på den enklaste vägen inte jämföra AS och PHP... Och då är det enklast att tratta ut textfiler med ISO Latin 1 eller i det här fallet UNICODE och sedan gå vidare med dem. Det är ett utmärkt och praktiskt format att lagra små textsnuttar som ska pillas in lite varstans i webbsammanhang. Det är också skönt att ha dem i "ren" form i fall de ska användas igen eller ändras. Annars hade jag ju kunnat försöka skripta någonting som byggde upp en hel HTML-sida.

Anders, jag har inte läst på ordentligt om detta. Men i praktiken är det ingen skillnad nuförtiden om man använder "& a r i n g ;" eller å... Meta tags läses främst av robotar som inte bryr sig om HTML, utan letar nyckelord. HTML är ju en framställningsform av data och inte informationen i sig. Meta tagarna är inte HTML-kod för att ge ett utseende åt information, utan "ren" information... (med reservation för att jag inte läst på)

1
Bevaka tråden