Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Dateien und Unterverzeichnisse nach UTF-8

0 views
Skip to first unread message

Rudolf Harras

unread,
Jan 16, 2009, 8:12:59 PM1/16/09
to
Ich suche ein Programm mit dem man gesamte Verzeichnisse nach UTF-8
umwandeln kann.

Habe leider nur die Möglichkeit über Cywin gefunden, und da funktioniert
es nicht. Angeblich soll es mit
find . -name "*.php" -exec iconv -f ISO-8859-1 -t UTF-8 {} -o
../newdir_utf8/{} \;
gehen, aber kommt bei mir nur eine Fehlermeldung: no such file or
directory, bzw. wird die ausgabe nur angezeigt nicht aber abgespeichert.

Gibt es ein Windows-Programm das das kann? Wenn ich mit dem Editor die
Dateien öffne und beim Speichern UTF-8 einstelle dann paßt alles, nur
ist es etwas mühsam das mit jeder Datei zu machen.

Rüdiger Rösler

unread,
Jan 17, 2009, 8:45:52 AM1/17/09
to
Rudolf Harras <rud...@temporaryforwarding.com> typed:

Sofern die PHP-Skripte in reinem Textformat vorliegen, könnte Dir dieses
Skript die Arbeit erleichtern:

'######################### Convert2Uni.vbs ############################
' von h.r.roesler
Option Explicit
' konvertiert ANSI-Textdateien ins Unicode-Format für PHP-Dateien
' Beim Aufruf müssen 2 Parameter angegeben werden:
' 1. Der Name der Ordner-Hierarchie, die konvertiert werden soll
' 2. Der Name des Ausgabe-Ordners
' Beispiel: Convert2UTF8 H:\ Q:\PHP

Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const EXT = "php"
Dim fso, strStartFolder, strOutFolder

Set fso = CreateObject("Scripting.FileSystemObject")

If WScript.Arguments.Count > 1 Then
strStartFolder = WScript.Arguments(0)
strOutFolder = WScript.Arguments(1)
If Not(fso.FolderExists(strOutFolder)) Then
Wscript.Echo "Erzeuge neuen Ordner:" & vbCRLF & strOutFolder
fso.CreateFolder strOutFolder
End If
Search EXT, fso.GetFolder(strStartFolder), strOutFolder
End If

Sub Search(strExt, fsoFolder, strNewFolder)
Dim fsoFile, fsoSubFolder

On Error Resume Next
For Each fsoFile In fsoFolder.Files
If Not(IsEmpty(fsoFile)) Then
If LCase(fso.GetExtensionName(fsoFile.Name) = strExt) Then
WScript.Echo "Datei " & fsoFile.Path & _
" wird konvertiert."
Convert fsoFile, fso.BuildPath(strNewFolder, _
fso.GetFileName(fsoFile.ParentFolder))
End If
End If
Next

For Each fsoSubFolder In fsoFolder.SubFolders
Search strExt, fsoSubFolder, strNewFolder
Next
End Sub

Sub Convert(fsoFile, strOutFolder)
Dim fsoTxt, strOutFile, fsoOutFile

If Not(fso.FolderExists(strOutFolder)) Then
Wscript.Echo "Erzeuge neuen Ordner:" & vbCRLF & strOutFolder
fso.CreateFolder strOutFolder
If Not(fso.FolderExists(strOutFolder)) Then WScript.Quit
End If

strOutFile = fso.BuildPath(strOutFolder, fsoFile.Name)
Set fsoTxt = fsoFile.OpenAsTextStream(ForReading)
Set fsoOutFile = fso.CreateTextFile(strOutFile, True, vbTrue)

fsoOutFile.Write fsoTxt.ReadAll

fsoTxt.Close
fsoOutFile.Close
WScript.Echo "Datei " & fsoFile.Name & " wurde konvertiert."
End Sub

--
ЯR

Rudolf Harras

unread,
Jan 21, 2009, 9:13:00 AM1/21/09
to
Rüdiger Rösler schrieb:

>> Gibt es ein Windows-Programm das das kann? Wenn ich mit dem Editor die
>> Dateien öffne und beim Speichern UTF-8 einstelle dann paßt alles, nur
>> ist es etwas mühsam das mit jeder Datei zu machen.
>
> Sofern die PHP-Skripte in reinem Textformat vorliegen, könnte Dir dieses
> Skript die Arbeit erleichtern:

Oh danke, leider klappt es nicht ganz. Die Dateien die ich dann auf den
neuen Server lade werden im Browser nur als Text dargestellt.

Aber wenn Du den Fehler noch beheben kannst ist das Skript sicher
brauchbar! Zu beachten wär noch dass die Verzeichnisstruktur erhalten
bleibt, gibt es mehrere Verzeichnisebenen so gibt es beim Export dieses
Skripts nachher nur eine.

Ich habe mir momentan mal so geholfen daß ich mit Inforapid Search &
Replace einfach alle Umlaute von zB ö in &ouml; umgewandelt habe, damit
geht es dann auch. Ist halt keine elegante Lösung.

Rüdiger Rösler

unread,
Jan 21, 2009, 2:37:48 PM1/21/09
to
Rudolf Harras <rud...@temporaryforwarding.com> typed:

> Rüdiger Rösler schrieb:
>
>>> Gibt es ein Windows-Programm das das kann? Wenn ich mit dem Editor
>>> die Dateien öffne und beim Speichern UTF-8 einstelle dann paßt
>>> alles, nur ist es etwas mühsam das mit jeder Datei zu machen.
>>
>> Sofern die PHP-Skripte in reinem Textformat vorliegen, könnte Dir
>> dieses Skript die Arbeit erleichtern:
>
> Oh danke, leider klappt es nicht ganz. Die Dateien die ich dann auf
> den neuen Server lade werden im Browser nur als Text dargestellt.

Ja, ich habe zu spät erkannt, dass sie ins Unicode-Format umgewandelt
wurden. Ursprünglich dachte ich, es handle sich um UTF-8.

> Aber wenn Du den Fehler noch beheben kannst ist das Skript sicher
> brauchbar! Zu beachten wär noch dass die Verzeichnisstruktur erhalten
> bleibt, gibt es mehrere Verzeichnisebenen so gibt es beim Export
> dieses Skripts nachher nur eine.

Also, es tut mir leid, aber die Ordnerstruktur kann ich jetzt nicht
bewahren. :-) Dazu müsste ich diese Struktur erst mal sehen.

> Ich habe mir momentan mal so geholfen daß ich mit Inforapid Search &
> Replace einfach alle Umlaute von zB ö in &ouml; umgewandelt habe,
> damit geht es dann auch. Ist halt keine elegante Lösung.

Also schön, ich war auf Diebestour im Netz und habe das Skript etwas
angepasst. Ich muss allerdings dazu sagen, ich kenne mich damit schlecht
aus, aber probier es mal. Diese Datei ist allerdings im WSF-Format, also
aufpassen:

<job>
<reference object="Scripting.FileSystemObject" />
<object id="fso" progId="Scripting.FileSystemObject" />
<reference object="ADODB.Stream" />
<object id="stmANSI" progId="ADODB.Stream" />
<object id="stmUTF8" progId="ADODB.Stream" />
<object id="stmNoBOM" progid="ADODB.Stream" />
<script language="VBScript">
'########################## ANSI2UTF-8.wsf ############################
' von h.r.roesler
' portions inspired by dilettante
Option Explicit
' konvertiert ANSI-Textdateien ins UTF8-Format für PHP-Dateien


' Beim Aufruf müssen 2 Parameter angegeben werden:
' 1. Der Name der Ordner-Hierarchie, die konvertiert werden soll
' 2. Der Name des Ausgabe-Ordners

' Beispiel: ANSI2UTF-8 H:\ Q:\PHP

Const EXT = "php"
Dim strStartFolder, strOutFolder

If WScript.Arguments.Count > 1 Then
strStartFolder = WScript.Arguments(0)
strOutFolder = WScript.Arguments(1)

Search EXT, fso.GetFolder(strStartFolder), strOutFolder
End If

Sub Search(strExt, fsoFolder, ByVal strNewFolder)
Dim fsoFile, fsoSubFolder, strFolder

If Not(fso.FolderExists(strNewFolder)) Then
fso.CreateFolder strNewFolder
End If

On Error Resume Next
For Each fsoFile In fsoFolder.Files
If Not(IsEmpty(fsoFile)) Then
If LCase(fso.GetExtensionName(fsoFile.Name) = strExt) Then

Convert fsoFile, fso.BuildPath(strNewFolder, _
fsoFile.Name)


End If
End If
Next

If strOutFolder <> strNewFolder And _
fso.GetFolder(strNewFolder).Files.Count = 0 Then
fso.DeleteFolder strNewFolder
End If

For Each fsoSubFolder In fsoFolder.SubFolders

strNewFolder = fso.BuildPath(strOutFolder, _
fso.GetFileName(fsoSubFolder))


Search strExt, fsoSubFolder, strNewFolder
Next
End Sub


Sub Convert(fsoFile, strOutFile)
' this code was stolen from:
' http://www.tek-tips.com/viewthread.cfm?qid=1392917
' the author has published it under the name of dilettante

WScript.Echo "Datei " & fsoFile.Path & " wird konvertiert."
With stmANSI
.Open
.Type = adTypeBinary
.LoadFromFile fsoFile.Path
.Type = adTypeText
.LineSeparator = adCRLF
.Charset = "x-ansi" 'Same as Windows-1252.
With stmUTF8
.Open
.Type = adTypeText
.LineSeparator = adLF
.CharSet = "UTF-8"

'Use Line operations to obtain LineSeparator action.
Do Until stmANSI.EOS
.WriteText stmANSI.ReadText(adReadLine), adWriteLine
Loop
stmANSI.Close
.SaveToFile strOutFile, adSaveCreateOverWrite
.Close
End With
End With
WScript.Echo "Datei " & fsoFile.Name & " wurde konvertiert."&vbCRLF
End Sub </script>
</job>
--
ЯR

Rüdiger Rösler

unread,
Jan 21, 2009, 3:53:45 PM1/21/09
to
Rudolf Harras <rud...@temporaryforwarding.com> typed:

> Oh danke, leider klappt es nicht ganz. Die Dateien die ich dann auf
> den neuen Server lade werden im Browser nur als Text dargestellt.

Ja, ich habe zu spät erkannt, dass sie ins Unicode-Format umgewandelt


wurden. Ursprünglich dachte ich, es handle sich um UTF-8.

> Aber wenn Du den Fehler noch beheben kannst ist das Skript sicher


> brauchbar! Zu beachten wär noch dass die Verzeichnisstruktur erhalten
> bleibt, gibt es mehrere Verzeichnisebenen so gibt es beim Export
> dieses Skripts nachher nur eine.

Also, es tut mir leid, aber die Ordnerstruktur kann ich jetzt nicht
bewahren. Vielleicht kannst Du selber mal etwas entwerfen?

> Ich habe mir momentan mal so geholfen daß ich mit Inforapid Search &
> Replace einfach alle Umlaute von zB ö in &ouml; umgewandelt habe,
> damit geht es dann auch. Ist halt keine elegante Lösung.

Also schön, ich war auf Diebestour im Netz und habe das Skript etwas


angepasst. Ich muss allerdings dazu sagen, ich kenne mich damit schlecht
aus, aber probier es mal. Diese Datei ist allerdings im WSF-Format, also
aufpassen:

<job>
<reference object="Scripting.FileSystemObject" />
<object id="fso" progId="Scripting.FileSystemObject" />
<reference object="ADODB.Stream" />
<object id="stmANSI" progId="ADODB.Stream" />
<object id="stmUTF8" progId="ADODB.Stream" />

<script language="VBScript">
'########################## ANSI2UTF-8.wsf ############################
' von h.r.roesler
' portions inspired by dilettante

Option Explicit
' konvertiert ANSI-Textdateien ins UTF8-Format für PHP-Dateien


' Beim Aufruf müssen 2 Parameter angegeben werden:
' 1. Der Name der Ordner-Hierarchie, die konvertiert werden soll
' 2. Der Name des Ausgabe-Ordners

' Beispiel: ANSI2UTF-8 H:\ Q:\PHP

Const EXT = "php"
Dim strStartFolder, strOutFolder

If WScript.Arguments.Count > 1 Then
strStartFolder = WScript.Arguments(0)
strOutFolder = WScript.Arguments(1)

Search EXT, fso.GetFolder(strStartFolder), strOutFolder
End If

Sub Search(strExt, fsoFolder, ByVal strNewFolder)
Dim fsoFile, fsoSubFolder, strFolder

If Not(fso.FolderExists(strNewFolder)) Then
fso.CreateFolder strNewFolder
End If

On Error Resume Next


For Each fsoFile In fsoFolder.Files
If Not(IsEmpty(fsoFile)) Then
If LCase(fso.GetExtensionName(fsoFile.Name) = strExt) Then

Convert fsoFile, fso.BuildPath(strNewFolder, _
fsoFile.Name)

End If
End If
Next

If strOutFolder <> strNewFolder And _
fso.GetFolder(strNewFolder).Files.Count = 0 Then
fso.DeleteFolder strNewFolder
End If

For Each fsoSubFolder In fsoFolder.SubFolders


strNewFolder = fso.BuildPath(strOutFolder, _
fso.GetFileName(fsoSubFolder))

Search strExt, fsoSubFolder, strNewFolder
Next
End Sub

Sub Convert(fsoFile, strOutFile)
' parts of this code were stolen from:


' http://www.tek-tips.com/viewthread.cfm?qid=1392917
' the author has published it under the name of dilettante

WScript.Echo "Datei " & fsoFile.Path & " wird konvertiert."
With stmANSI
.Open

.LoadFromFile fsoFile.Path
.Type = adTypeText
.LineSeparator = adCRLF
.Charset = "x-ansi" 'Same as Windows-1252.
With stmUTF8
.Open
.Type = adTypeText
.LineSeparator = adLF
.CharSet = "UTF-8"

'Use Line operations to obtain LineSeparator action.
Do Until stmANSI.EOS
.WriteText stmANSI.ReadText(adReadLine), adWriteLine
Loop

.SaveToFile strOutFile, adSaveCreateOverWrite
.Close
End With

.Close


End With
WScript.Echo "Datei " & fsoFile.Name & " wurde konvertiert."&vbCRLF
End Sub </script>
</job>

Ich hatte jetzt allerdings nicht viel Zeit, den Kode zu testen, beim
ersten Anblick sah es nach UTF-8 aus. Beschwerden bitte schriftlich an
die Beschwerde-Abteilung. 8-)

--
ЯR

0 new messages