diff --git a/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/ASCII_EBCDIC_Example.java b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/ASCII_EBCDIC_Example.java new file mode 100644 index 000000000000..3a155e3f2b55 --- /dev/null +++ b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/ASCII_EBCDIC_Example.java @@ -0,0 +1,12 @@ +import java.nio.charset.Charset; + +class Main { + public static void main(String[] args) { + // Example: EBCDIC bytes for "ABC" (in Cp037) + byte[] ebcdicBytes = new byte[] { (byte)0xC1, (byte)0xC2, (byte)0xC3 }; + + // Convert to String using EBCDIC Cp037 charset + String text = new String(ebcdicBytes, Charset.forName("Cp037")); + System.out.println(text); + } +} \ No newline at end of file diff --git a/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/Alternative_approach.java b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/Alternative_approach.java new file mode 100644 index 000000000000..42354ec98bc3 --- /dev/null +++ b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/Alternative_approach.java @@ -0,0 +1,30 @@ +import java.io.*; +import java.nio.charset.*; + +public class EbcdicStreamConverter { + + public static void main(String[] args) { + try ( + InputStreamReader reader = new InputStreamReader( + new FileInputStream("input.ebc"), + Charset.forName("Cp037") + ); + OutputStreamWriter writer = new OutputStreamWriter( + new FileOutputStream("output.txt"), + StandardCharsets.US_ASCII + ) + ) { + char[] buffer = new char[1024]; + int length; + + while ((length = reader.read(buffer)) != -1) { + writer.write(buffer, 0, length); + } + + System.out.println("Conversion complete! See output.txt"); + + } catch (IOException e) { + e.printStackTrace(); + } + } +} diff --git a/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/practical_example.java b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/practical_example.java new file mode 100644 index 000000000000..0e4e5f3a50c8 --- /dev/null +++ b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/practical_example.java @@ -0,0 +1,21 @@ +import java.io.*; +import java.nio.charset.*; + +public class EbcdicToAsciiExample { + + public static void main(String[] args) throws Exception { + // Step 1: Read raw EBCDIC bytes from file + FileInputStream fis = new FileInputStream("input.ebc"); + byte[] ebcdicData = fis.readAllBytes(); + fis.close(); + + // Step 2: Decode EBCDIC bytes to Unicode string + String unicodeText = new String(ebcdicData, Charset.forName("Cp037")); + + // Step 3: Encode Unicode string to ASCII bytes + byte[] asciiData = unicodeText.getBytes(StandardCharsets.US_ASCII); + + // Step 4: Print final ASCII string + System.out.println(new String(asciiData, StandardCharsets.US_ASCII)); + } +} diff --git a/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/step_by_step_conversion.java b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/step_by_step_conversion.java new file mode 100644 index 000000000000..5e58d12c16cd --- /dev/null +++ b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/step_by_step_conversion.java @@ -0,0 +1,15 @@ +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; +class Main +{ + public static void main(String[] args) { + // Step 0: Example EBCDIC bytes ("HELLO" in Cp037) + byte[] ebcdicData = { (byte)0xC8, (byte)0x85, (byte)0x93, (byte)0x93, (byte)0x96 }; + // Step 1: Decode from EBCDIC (Cp037) to Unicode string + String unicodeText = new String(ebcdicData, Charset.forName("Cp037")); + // Step 2: Encode from Unicode string to ASCII bytes + byte[] asciiData = unicodeText.getBytes(StandardCharsets.US_ASCII); + // Step 3: Print final ASCII string + System.out.println(new String(asciiData, StandardCharsets.US_ASCII)); + } + +} \ No newline at end of file diff --git a/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/unit_test.java b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/unit_test.java new file mode 100644 index 000000000000..598a3b42ee3b --- /dev/null +++ b/core-java-modules/core-java-string-conversions-4/EBCDIC_to_ASCII/unit_test.java @@ -0,0 +1,98 @@ +import java.io.*; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; + +public class EBCDICConversionTest { + + public static void main(String[] args) throws Exception { + testBasicEBCDICToAsciiExample(); + testStepByStepConversion(); + testFileBasedConversion(); + testStreamingConversion(); + System.out.println("✅ All tests passed!"); + } + + static void assertEquals(String expected, String actual) { + if (!expected.equals(actual)) { + throw new AssertionError("Expected: [" + expected + "], but got: [" + actual + "]"); + } + } + + static void testBasicEBCDICToAsciiExample() { + // Example: EBCDIC bytes for "ABC" (in Cp037) + byte[] ebcdicBytes = new byte[] { (byte) 0xC1, (byte) 0xC2, (byte) 0xC3 }; + String text = new String(ebcdicBytes, Charset.forName("Cp037")); + System.out.println("Decoded text: " + text); + assertEquals("ABC", text); + } + + static void testStepByStepConversion() { + // Example EBCDIC bytes ("Hello" in Cp037) + byte[] ebcdicData = { (byte) 0xC8, (byte) 0x85, (byte) 0x93, (byte) 0x93, (byte) 0x96 }; + String unicodeText = new String(ebcdicData, Charset.forName("Cp037")); + assertEquals("Hello", unicodeText); + + byte[] asciiData = unicodeText.getBytes(StandardCharsets.US_ASCII); + assertEquals("Hello", new String(asciiData, StandardCharsets.US_ASCII)); + + System.out.println("Step-by-step conversion OK: " + new String(asciiData)); + } + + static void testFileBasedConversion() throws Exception { + File tempFile = File.createTempFile("input", ".ebc"); + tempFile.deleteOnExit(); + + // "TEST" in Cp037 (all uppercase) + byte[] ebcdicData = { (byte) 0xE3, (byte) 0xC5, (byte) 0xE2, (byte) 0xE3 }; + try (FileOutputStream fos = new FileOutputStream(tempFile)) { + fos.write(ebcdicData); + } + + byte[] rawBytes = new FileInputStream(tempFile).readAllBytes(); + String unicodeText = new String(rawBytes, Charset.forName("Cp037")); + assertEquals("TEST", unicodeText); + + byte[] asciiData = unicodeText.getBytes(StandardCharsets.US_ASCII); + assertEquals("TEST", new String(asciiData, StandardCharsets.US_ASCII)); + + System.out.println("File-based conversion OK: " + unicodeText); + } + + static void testStreamingConversion() throws IOException { + File input = File.createTempFile("input", ".ebc"); + File output = File.createTempFile("output", ".txt"); + input.deleteOnExit(); + output.deleteOnExit(); + + // "JAVA" in Cp037 (all uppercase) + byte[] ebcdicData = { (byte) 0xD1, (byte) 0xC1, (byte) 0xE5, (byte) 0xC1 }; + try (FileOutputStream fos = new FileOutputStream(input)) { + fos.write(ebcdicData); + } + + try ( + InputStreamReader reader = new InputStreamReader( + new FileInputStream(input), + Charset.forName("Cp037") + ); + OutputStreamWriter writer = new OutputStreamWriter( + new FileOutputStream(output), + StandardCharsets.US_ASCII + ) + ) { + char[] buffer = new char[1024]; + int length; + while ((length = reader.read(buffer)) != -1) { + writer.write(buffer, 0, length); + } + } + + String result = new String( + new FileInputStream(output).readAllBytes(), + StandardCharsets.US_ASCII + ); + assertEquals("JAVA", result); + + System.out.println("Streaming conversion OK: " + result); + } +}