如何获取这些字符①②
?
我正在使用Java 1.6来读取包含这些字符的csv文件(使用SJIS编码),并且在运行程序时我只返回��
。
public class Example {
public static void main(String[] args) throws IOException {
StringBuffer buffer = new StringBuffer();
FileInputStream fis = new FileInputStream(new File("examples/input.csv"));
InputStreamReader isr = new InputStreamReader(fis, "SJIS");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
buffer.append((char)ch);
}
in.close();
System.out.println(buffer.toString());
}
}
input.csv
的内容:
"備考"
①②ランプ
�@�Aランプ
"①②ランプ"
答案 0 :(得分:5)
Shift-JIS字符集不包含字符①和②。
您的文件未保存在标准Shift-JIS中,这是您在Java中以名称SJIS
获得的编码。它实际上是Windows code page 932,是一个特定于Microsoft的Shift-JIS扩展, 包含①②。您可以使用名称windows-932
。
答案 1 :(得分:0)
在我看来,您可能需要设置程序用于打印的控制台/终端的编码。
这可能不是您正在寻找的答案,但如果您使用的是Eclipse,则可以尝试以下操作。根据您的问题,输出是正确的。
在Eclipse中,如果单击运行按钮旁边的向下箭头,您应该会看到“运行配置...”选项。如果选择“公共”选项卡,则应看到标记为“编码”的表单字段集。选择“其他”单选按钮并将选择更改为“UTF-8”。
我稍微修改了一下代码,通过项目加载文件。我还使用Character.toChars(ch)
而不是(char) ch
作为解析字符的更强大的方法。 Character.toChars
函数“将指定字符(Unicode代码点)转换为存储在char数组中的UTF-16表示形式。”
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URISyntaxException;
public class App {
public static void main(String[] args) {
try {
StringBuffer buffer = new StringBuffer();
FileInputStream fis = loadResource("resources/input.csv");
InputStreamReader isr = new InputStreamReader(fis, "UTF-8");
Reader in = new BufferedReader(isr);
int ch;
while ((ch = in.read()) > -1) {
buffer.append(Character.toChars(ch));
}
in.close();
System.out.println(buffer.toString());
} catch (IOException e) {
e.printStackTrace();
} catch (URISyntaxException e) {
e.printStackTrace();
}
}
private static final FileInputStream loadResource(String name) throws FileNotFoundException, URISyntaxException {
return new FileInputStream(new File(App.class.getClassLoader().getResource(name).toURI()));
}
}