在Java中, 我收到一个包含挪威字符和冰岛字符的文本输入。
我得到一个流然后将其解析为String并分配给一些变量并再次创建输出。
当我输出时,挪威和冰岛的角色会变形并得到一些?或者¶等。打开时输出文件也会得到相同的字符。
我正在使用Maven制作web项目.war。冰岛语/挪威语文本编码需要哪些基本设置?
我得到了一种设置Locale但无法使用它生成输出的方法。 Locale.setDefault(新的Locale(“is_IS”,“Iceland”));
请建议。怎么做?
实际角色:HÝS048
扭曲字符:H?S048(直接SOUT时)或H ?? S048(当我从字符串中获取字节并使用UTF-8放入字符串对象时)
更新(11:13) 我用过
CharsetEncoder encoder = Charset.forName("UTF-8").newEncoder();
encoder.onMalformedInput(CodingErrorAction.REPORT);
encoder.onUnmappableCharacter(CodingErrorAction.REPORT);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\try1.csv"),encoder));
out.write(sb.toString());
out.flush();
out.close();
输出:H�S048
更新(12:41): 从HTTP源读取流时,我使用了以下内容:
`BufferedReader in = new BufferedReader(new InputStreamReader(apiURL.openStream(), "UTF-8"));`
它在控制台上完美显示输出。 我已经获取了CSV的值并将其放在逻辑Bean之后。
现在我需要创建CSV文件,但是当我从bean获取值时,它再次给出了扭曲的文本。我使用StringBuilder追加bean的值并将其写入文件。 :(希望最好。寻找想法
答案 0 :(得分:0)
此问题的解决方案是以UTF-8格式获取数据,以UTF-8打印并以UTF-8创建文件
从URL读取数据如下:
BufferedReader in = new BufferedReader(new InputStreamReader(apiURL.openStream(), "UTF-8"));
然后将其设置为bean或执行任何操作。打印时
System.out.println(new String(sb.toString().getBytes("UTF-8"),"UTF-8"));
然后在再次创建文件时:
FileWriter writer = new FileWriter("d:\\try2.csv");
writer.append(new String(sb.toString().getBytes("UTF-8"),"UTF-8"));
writer.flush();
writer.close();
这就是我的问题得到解决的方法。