UTF到ASCII的转换



我使用Java web服务调用oracle过程来读取一些记录。这个Java web服务的执行是在Shell Script的帮助下自动执行的。所以流程是这样的:

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

作为最终产品,生成的提要文件是UTF-8格式的,我们需要用ASCII创建文件。所以谁能帮我一些Linux或Java代码,我可以添加到我的shell脚本或Java代码将文件转换为ASCII。

注:我知道在notepad++的帮助下将文件从UTF转换为ASCII,但我需要这个过程自动化。任何帮助将是非常感激的。

可以这样做:

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();
    }
}

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

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"));

相关内容

  • 没有找到相关文章

最新更新