Hallo zusammen,
ich kämpfe seit einigen Stunden mit einem Encoding-Problem und weiß mir nicht mehr zu helfen. Vielleicht kann mir hier jemand Tipps geben.
Es geht um folgendes: Aus einem System werden jede Menge Dateien ausgespielt mit Dateinamenschema: RZU_10000000001.pdf bis RZU_n+1.pdf
Zu diesen vielen Dateien gibt es ein zugehöriges Verzeichnis (XML-Dokument), welche weitere Informationen zu den einzelnen Dateien enthält.
Da niemand etwas mit den kryptischen Dateibezeichnungen anfangen kann, wollte ich per XSLT eine Batch-Datei erzeugen, die aus den Informationen des Verzeichnisses, bessere Dateinamen erzeugt. Das klappte bisher auch ganz gut, bis in den Informationen Sonderzeichen auftraten, die dann im Batch nicht funktionierten.
Im Moment interessieren mich erstmal nur die deutschen Umlaute.
Das Hauptproblem liegt da darin, dass die Batch-Datei ASCII-codiert sein muss und die Umlaute daher etwas anders codiert sind (zum Anschauen: echo äöüÄÖÜ > umlaute.txt). Diese Codierungen habe ich in einer translate-Funktion integriert.
Hier der XSLT-Codeschnipsel:
Gebe ich per <xslutput> kein encoding an, bekomme ich genau den Output den ich eigentlich möchte, jedoch in U8-DOS. Das funktioniert auf der Batch nicht, bzw. stimmt da die Codierung nicht.
Gebe ich per <xslutput encoding="ASCII"/> an, bekomme ich ein ASCII-Dokument, jedoch sind auf einem mal meine Umlaute nicht mit den Zeichen ersetzt, sondern mit Escape-Sequenzen ala ü
Ok, disable-output-escaping="yes" aktiviert, zeigt aber keine Wirkung. gleicher Output.
Was nun? Für Tipps und Ideen bin ich dankbar.
Gruß,
Johannes
PS: Wie man an der langen translate-Funktion sieht, habe ich früher einfach alle Sonderformen eines Buchstabens in die Grundform zurückgewandelt, also bspw. ö,ó,ò,ô zu o. Das funktioniert problemlos. Aber aus rein ästhetischen Gründen würde ich nun gerne so viel wie möglich Sonderzeichen erhalten. Wenns einen Weg gibt und der funktioniert, wäre toll, wenn nicht, dann bleibts eben wie bisher.
ich kämpfe seit einigen Stunden mit einem Encoding-Problem und weiß mir nicht mehr zu helfen. Vielleicht kann mir hier jemand Tipps geben.
Es geht um folgendes: Aus einem System werden jede Menge Dateien ausgespielt mit Dateinamenschema: RZU_10000000001.pdf bis RZU_n+1.pdf
Zu diesen vielen Dateien gibt es ein zugehöriges Verzeichnis (XML-Dokument), welche weitere Informationen zu den einzelnen Dateien enthält.
Da niemand etwas mit den kryptischen Dateibezeichnungen anfangen kann, wollte ich per XSLT eine Batch-Datei erzeugen, die aus den Informationen des Verzeichnisses, bessere Dateinamen erzeugt. Das klappte bisher auch ganz gut, bis in den Informationen Sonderzeichen auftraten, die dann im Batch nicht funktionierten.
Im Moment interessieren mich erstmal nur die deutschen Umlaute.
Das Hauptproblem liegt da darin, dass die Batch-Datei ASCII-codiert sein muss und die Umlaute daher etwas anders codiert sind (zum Anschauen: echo äöüÄÖÜ > umlaute.txt). Diese Codierungen habe ich in einer translate-Funktion integriert.
Hier der XSLT-Codeschnipsel:
Code:
<xsl:template match="/"> <xsl:text>@echo off</xsl:text> <xsl:value-of select="$newLine"/> <xsl:for-each select="supplierlist/supplier"> <!-- alter Dateiname: RZU_... --> <xsl:variable name="oldFilename"><xsl:value-of select="RZU"/></xsl:variable> <!-- neuer Dateiname: Hersteller_-_PDF-Titel_-_MatNr --> <xsl:variable name="newFilename"><xsl:value-of select="translate(PartDenominator,'\/:*?"<>|äöüÄÖÜßÁÀÂáàâÉÈÊéèêÍÌÎíìîÓÒÔóòôÚÙÛúùû°Çç
’`´ ,','_________„”Ž™šáAAAaaaEEEeeeIIIiiiOOOoooUUUuuu_Cc_____.')"/>_-_<xsl:value-of select="translate(PartTitle,'\/:*?"<>|äöüÄÖÜßÁÀÂáàâÉÈÊéèêÍÌÎíìîÓÒÔóòôÚÙÛúùû°Çç
’`´ ,','_________„”Ž™šáAAAaaaEEEeeeIIIiiiOOOoooUUUuuu_Cc_____.')"/>_-_<xsl:value-of select="MatNr"/>.pdf</xsl:variable> <!-- Erzeuge Umbenennen-Befehl --> <xsl:text>copy "in\</xsl:text> <xsl:value-of select="$oldFilename"/> <xsl:text>" "out\</xsl:text> <xsl:value-of select="$newFilename"/> <xsl:text>"</xsl:text> <xsl:value-of select="$newLine"/> </xsl:for-each> </xsl:template>
Gebe ich per <xslutput encoding="ASCII"/> an, bekomme ich ein ASCII-Dokument, jedoch sind auf einem mal meine Umlaute nicht mit den Zeichen ersetzt, sondern mit Escape-Sequenzen ala ü
Ok, disable-output-escaping="yes" aktiviert, zeigt aber keine Wirkung. gleicher Output.
Was nun? Für Tipps und Ideen bin ich dankbar.
Gruß,
Johannes
PS: Wie man an der langen translate-Funktion sieht, habe ich früher einfach alle Sonderformen eines Buchstabens in die Grundform zurückgewandelt, also bspw. ö,ó,ò,ô zu o. Das funktioniert problemlos. Aber aus rein ästhetischen Gründen würde ich nun gerne so viel wie möglich Sonderzeichen erhalten. Wenns einen Weg gibt und der funktioniert, wäre toll, wenn nicht, dann bleibts eben wie bisher.
Comment