| 

.NET C# Java Javascript Exception

3
Ich lese aus einem bestehenden Skript in HTML codierte Textfiles ein und schnippel mir teile des contents in eine CSV-Datei aus.

Jetzt ist das Problem das diese Textfiles mit Dreamweaver erstellt und alle Sonderzeichen sind somit mit der HTML-Encodierung (ISO-8859-1) hinterlegt, also anstatt ü,ä "& uml;" "& auml;" etc.

Problem 1:
Bei der Ausgabe gehen mir alle Sonder-Codierungen flöten und es wird irgendein anderer Codeschrott reingeschrieben (unicode). Mit dem ich nix anfangen kann

Problem 2:
Im CVS wäre es gut die Sonderzeichen wieder alle in natürlicher reinform ü,ä etc., zu haben weil das Programm in das ich die Sachen importiere damit einfacher zurecht kommt, als wenns im HTML ist. Wie kriege ich das On-The-Fly hin?

Hier ist das bestehende Skript, das soweit funktioniert:

println "Hello, World!"

@Grapes(
@Grab(group='nekohtml', module='nekohtml', version='1.9.6.2')
)

import org.cyberneko.html.parsers.SAXParser

@Grapes(
@Grab(group='xerces', module='xerces', version='2.4.0')
)


import org.apache.xerces.parsers.AbstractSAXParser


import groovy.xml.StreamingMarkupBuilder
import groovy.util.slurpersupport.NodeChild

final String SEPARATOR = ";"
final String QUOTE = "|"
final String ESCAPE = "\"

def datadir = new File("c:\data\en_alt")

datadir.eachFile {
println "Processing "+it.name+" ..."
def name = it.name.replace(/.html/,"")
name = it.name.replace(/.htm/,"")
def currfile = new File(it.absolutePath)

def html_content = new XmlSlurper(new org.cyberneko.html.parsers.SAXParser()).parse(currfile)

def output = new File("c:\data\en_alt\en_alt.csv")
def prod_details = ""
def prod_red = ""
html_content.'**'.each {
if (it.@class == "pl_red") {
prod_red = it.text()
prod_red = (new StreamingMarkupBuilder().bindNode(it)).toString()
prod_red = prod_red.replaceFirst("<TD class='pl_red'>","")
prod_red = prod_red.replace("</TD>","")
}
if (it.@class == "pl_small") {
prod_details = (new StreamingMarkupBuilder().bindNode(it)).toString()
prod_details = prod_details.replaceFirst("<TD class='pl_small'>","")
prod_details = prod_details.replace("</TD>","")

output << name+SEPARATOR+prod_red+SEPARATOR+QUOTE+prod_details+QUOTE+SEPARATOR+"EN\n"
}
}
}
30.05.2013
Chrysler 11 2
1 Antwort
1
Ich kenn mich zwar mit Groovy nicht aus, aber ich sehe, dass du kein Encoding im Quelltext verwendest.
Du kannst das wohl beim schreiben/lesen der Daten angeben, wenn du es so machst:

groovy> text = 'Zwölf Boxkämpfer jagen Viktor quer über den großen Sylter Deich.'
groovy> new File('Beispiel.txt').write(text,'UTF8')
groovy> println (new File('Beispiel.txt').getText('UTF8'))

So müssten die Umlaute mitgenommen werden ;-)
Quelle: http://de.wikibooks.org/
30.05.2013
DerPunk 1,2k 1 7

Stelle deine Groovy-Frage jetzt!