# EBCDIC->ASCII/U-Code



## takidoso (4. September 2007)

Hallo und Halli,
gibt es eigentlich eine offizielle und elegante Möglichkeit in Java EBCDIC in Ascii oder UniqueCode umzuwandeln vielleicht mit einer Codepage, die man einem Input- bzw. Outputstream oder (Reader/Writer) mit gibt?

Ich bräuchte etwas was es seit Java 1.4. existiert bzw funktioniert.

Mit bestem Dank im Voraus

Takidoso


----------



## takidoso (4. September 2007)

Ahh wurde nun doch selbst fündig, es ist die Codepage
"Cp1047"

mal schauen ob ich damit erfolg haben werde


----------



## takidoso (5. September 2007)

hmmmmm eigetnlich dachte ich ,dass man lediglich die code page angeben müsste 
doch leider scheint er keine Umsetzung in EBCDIC machen zu wollen. 

ich habe dazu follgendes Testprogramm:

```
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;


public class StreamContendConverter
{

    private String m_inputFilePath;
    private String m_inputCodePage;
    private String m_outputFilePath;
    private String m_outputCodePage;

    public StreamContendConverter(String[] args)
    {
        m_inputFilePath  = args[0];
        m_inputCodePage  = args[1];
        m_outputFilePath = args[2];
        m_outputCodePage = args[3];
    }

    public void convertFile() throws Throwable
    {
        File iFile = new File(m_inputFilePath);
        File oFile = new File(m_outputFilePath);
        BufferedReader reader = null;
        BufferedWriter writer = null;

        try
        {
            if (m_inputCodePage.equalsIgnoreCase("default"))
            {
                reader = new BufferedReader(new InputStreamReader(new FileInputStream (iFile)));
            }
            else
            {
                reader = new BufferedReader(new InputStreamReader(new FileInputStream (iFile),m_inputCodePage));
            }

            if (m_inputCodePage.equalsIgnoreCase("default"))
            {
                writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(oFile)));
            }
            else
            {
                writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(oFile),m_outputCodePage));
            }

            System.out.println("inputFilePath="+m_inputFilePath);
            System.out.println("inputCodePage="+m_inputCodePage);

            System.out.println("outputFilePath="+m_outputFilePath);
            System.out.println("outputCodePage="+m_outputCodePage);

            String line;
            while ((line = reader.readLine())!=null)
            {
                writer.write(line+"\n");
            }
            
            
            
        }
        finally
        {
            reader.close();
            writer.flush();
            writer.close();
        }
    }

    static public void main(String[] args)
    {
        if (args.length != 4)
        {
            System.out.println("benötige 4 Argumente: [inputfile][codepage] [outputfile] [codepage]");
            System.exit(1);
        }

        StreamContendConverter stc = new StreamContendConverter(args);
        try
        {
            stc.convertFile();
        }
        catch (Throwable t)
        {
            t.printStackTrace();
            System.exit(-1);
        }

        System.out.println("ready");
    }
}
```
Wenn ich jedoch die Character-Set-Namen Cp10047 für Output angebe scheint das Programm es zu ignorieren. Mosern dass es diese Code-Page nicht gäbe tut er offenbar auch nicht.
Wenn ich irgen einen Blödsinn als Codepage für den Output angebe dann mosert er auch nicht 

hat da jemand eine Idee was ich da falsch mache?

Takidoso


----------



## takidoso (5. September 2007)

Nach ein wenig mehr ausprobiererei weiß ich nun auch warum es nicht zu Beginn an funktionierte. Undzwar wenn ich in meinem programm default setze, wird keine weitere Codepage für den jeweiligen Strohm hinein konfiguriert. 
Eigetnlich hätte ich angenommen, dass wenn ich im ersten Schritt z.B. eine UTF-8 Datei einlese und mit "default" (also ohne explizite Code-Angabe) ausgebe ich im nächsten Schritt sie mit "default" einlesen und mit Cp1047 als EBCDIC ausgeben könnte.
Komischerweise weigert sich da das Programm und schreibt die Datei offenbar auf defaultmäßig.
So richtig verstehen tuhe ich das zwar nicht, aber wenigstens funktioniert der explizite Weg nun in beide Richtungen. 

Takidoso


----------

