我使用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"));