UTF到ASCII转换

时间:2016-06-28 17:51:31

标签: java web-services unix ascii utf

我正在使用Java Web服务调用oracle过程来读取一些记录。在Shell脚本的帮助下,自动执行此Java Web服务。 所以流程如下:

Shell脚本调用Java Web服务,进一步的Java Web服务调用Oracle存储过程来读取一些记录。

作为最终产品,会生成一个UTF-8格式的Feed文件,我们需要以ASCII格式创建文件。所以任何人都可以帮助我使用一些Linux或Java代码,我可以将其添加到我的shell脚本或Java代码中,以将文件转换为ASCII。

P.S。我知道在NOTEPAD ++的帮助下将文件从UTF转换为ASCII,但我需要将此过程自动化。任何帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

可以这样做:

Charset srcEncoding = StandardCharsets.UTF_8;
Charset destEncoding = StandardCharsets.US_ASCII;
try (BufferedReader reader = Files.newBufferedReader(Paths.get("src"), srcEncoding);
     BufferedWriter writer = Files.newBufferedWriter(Paths.get("dest"), destEncoding)) {
    String line;
    while ((line = reader.readLine()) != null) {
        writer.write(line);
        writer.newLine();
    }
}

答案 1 :(得分:0)

理想的解决方案取决于您当前如何编写文件。 有很多方法。 如果使用字节,可以使用:

byte[] bytes = "somestring".getBytes("characterSetName");

PrintStream方法在构造函数中包含一个字符集名称:

new PrintStream(file,"characterSetName");

在您的情况下,字符集名称将为US-ASCII

您还可以使用Charset实例在字符集之间进行转换。

举个例子:

public static void main(String[] args) throws Exception {
    String textToWrite = "Hello World of encodings...";
    CharBuffer cb1 = CharBuffer.wrap(textToWrite);
    CharBuffer cb2 = CharBuffer.wrap(textToWrite);

    Charset chr = Charset.forName("US-ASCII");
    ByteBuffer byteBuffer = chr.encode(cb1);
    write("CharsetEncode.txt",byteBuffer);

    CharsetEncoder cr = chr.newEncoder();
    ByteBuffer byteBuffer1 = cr.encode(cb2);
    write("CharsetEncoderEncode.txt",byteBuffer1);

    write("StringGetBytes.txt",textToWrite.getBytes("US-ASCII"));

}

public static void write(String name, ByteBuffer buffer) throws Exception {
    byte[] bytes = new byte[buffer.limit()];
    buffer.get(bytes);
    write(name,bytes);
}

public static void write(String name, byte[] bytes) throws Exception {
    File f = new File(name);
    FileOutputStream fos = new FileOutputStream(f);
    fos.write(bytes);
    fos.flush();
    fos.close();
}

使用BufferedWriter时,可以使用Files.newBufferedWriter。这允许指定字符集。

File targetFile = ....;
BufferedWriter w = Files.newBufferedWriter(targetFile.toPath(), Charset.forName("US-ASCII"));