Tag: 字符编码

如何在Java中打开包含重音符号的文件?

( 编辑澄清并添加一些代码 ) 您好,我们需要解析来自世界各地的用户发送的数据。 我们的Linux系统具有en_US.UTF-8的默认语言环境。 但是,我们经常会在名称中收到带有变音符号的文件,例如“ special_á_ã_è_characters.doc ”。 虽然操作系统可以很好地处理这些文件,并且一个strace显示操作系统将正确的文件名传递给Java程序,但是Java会弹出名称并抛出“找不到文件”ioexception试图打开它们。 这个简单的程序可以说明问题: import java.io.*; import java.text.*; public class load_i18n { public static void main( String [] args ) { File actual = new File(“.”); for( File f : actual.listFiles()){ System.out.println( f.getName() ); } } } 在包含文件special_á_ã_è_characters.doc和默认美国英语语言环境的目录中运行此程序可以: special_�_�_�_characters.doc 通过export LANG = es_ES @ UTF-8设置语言正确打印出文件名(但是这是一个不可接受的解决方案,因为整个系统现在以西class牙语运行。)如下所示在程序中明确设置Locale也没有效果。 下面我修改了程序a)尝试打开文件,b)打开文件时无论是ASCII还是字节数组都打印出来: import java.io.*; import […]

以charset安全的方式获取Windows上的进程列表

这篇文章提供了一个解决方案来检索Windows下正在运行的进程列表。 实质上它确实: String cmd = System.getenv(“windir”) + “\\system32\\” + “tasklist.exe”; Process p = Runtime.getRuntime().exec(cmd); InputStreamReader isr = new InputStreamReader(p.getInputStream()); BufferedReader input = new BufferedReader(isr); 然后读取输入。 它看起来和工作得很好,但我想知道tasklist使用的charset是否可能不是默认的字符集,并且这个调用可能会失败? 例如, 关于不同可执行文件的另一个问题表明它可能会导致一些问题。 如果是这种情况,有没有办法确定适当的字符集是什么?

ISO-8859-1编码和二进制数据保存

我读了@Esailija对我的一个问题的评论 ISO-8859-1是唯一完全保留原始二进制数据的编码,具有精确的字节代码点匹配 我也在@AaronDigulla的回答中读到: 在Java中,ISO-8859-1(又名ISO-Latin1)是1:1映射 我需要对此有所了解。 这将失败(如此处所示): // \u00F6 is ö System.out.println(Arrays.toString(“\u00F6”.getBytes(“utf-8”))); // prints [-61, -74] System.out.println(Arrays.toString(“\u00F6”.getBytes(“ISO-8859-1”))); // prints [-10] 问题 我承认我不太明白 – 为什么它没有得到上面代码中的字节 ? 最重要的是,指定的位置 ( ISO-8859-1 字节保留行为 ) – 链接到源,或者JSL会很好。 它是唯一具有此属性的编码吗? 它与ISO-8859-1是默认默认值有关吗? 另请参阅此问题以获取其他字符集中的反例。

JDBC字符编码

我有一个在GlassFish 3上运行的Java Web应用程序和在MySQL上运行的JPA(EclipseLink)。 我面临的问题是,如果我使用update()方法将实体保存到数据库, String字段将失去完整性; ‘?’ 显示而不是一些字符。 服务器,页面和数据库配置为使用UTF-8 。 发布表单数据后,下一页正确显示数据。 此外,在NetBeans调试中“似乎”当前实体的String属性也存储了正确的值。 Dunno,如果可以信任NetBeans调试; 可能是它正确解码,但它是不正确的。

Java:如何检测(和更改?)System.console的编码?

我有一个程序在控制台上运行,它的变音符号和其他特殊字符在Mac上输出。 这是一个简单的测试程序: public static void main( String[] args ) { System.out.println(“höhößüä”); System.console().printf( “höhößüä” ); } 在默认的Mac控制台(使用默认的UTF-8编码)上,打印: h?h???? h?h???? 但手动将Mac终端的编码设置为“Mac OS Roman”后,它正确打印 höhößüä höhößüä 请注意,在使用System.console()的Windows系统上工作: h÷h÷▀³õ höhößüä 所以我如何制作我的节目…… rolleyes ……“到处跑”?

使用System.out.println显示特殊字符

我在使用Web服务中的特殊字符向我的数据库发送或显示文本时遇到问题。 在我的日食中,我将字符编码设置为UTF-8,但它仍然不允许我显示字符。 例如,简单的打印,如下面的代码 String test =”привет”; System.out.println(test); 要么 String test =”привет”; String query = “insert into communication (`test`) VALUES (‘”+ test +”‘); PreparedStatement preparedStmt1 = con.prepareStatement(query); preparedStmt1.executeUpdate(); 控制台上的结果以及如果我将其发送到我的数据库是??????。 如何在控制台上正确显示它并希望在数据库中显示

HttpServletRequest – setCharacterEncoding似乎什么都不做

我试图从请求中读取UTF-8信息。 我使用了“request.setCharacterEncoding(”UTF-8“);”,但似乎什么也没做 – 信息读取是非UTF-8。 我究竟做错了什么?

如何在java中添加UTF-8 BOM

我有一个Java存储过程,它使用Resultset对象从表中获取记录并创建一个csv文件。 BLOB retBLOB = BLOB.createTemporary(conn, true, BLOB.DURATION_SESSION); retBLOB.open(BLOB.MODE_READWRITE); OutputStream bOut = retBLOB.setBinaryStream(0L); ZipOutputStream zipOut = new ZipOutputStream(bOut); PrintStream out = new PrintStream(zipOut,false,”UTF-8″); out.write(‘\ufeff’); out.flush(); zipOut.putNextEntry(new ZipEntry(“filename.csv”)); while (rs.next()){ out.print(“\”” + rs.getString(i) + “\””); out.print(“,”); } out.flush(); zipOut.closeEntry(); zipOut.close(); retBLOB.close(); return retBLOB; 但生成的csv文件未显示正确的德语字符。 Oracle数据库的NLS_CHARACTERSET值也为UTF8。 请建议。

如何在Tomcat中设置请求编码?

我的Java webapp中存在问题。 这是index.jsp中的代码: JSP Page Hello World! Res: 当我发送请求时,我的浏览器会发送此标头: GET /kjd/index.jsp?q=%C3%A9 HTTP/1.1\r\n … Accept-Charset: UTF-8,*\r\n Tomcat服务器将此返回给我: Content-Type: text/html;charset=UTF-8\r\n 但是如果我在表格中发送“é”(UTF-8中的%C3%A9),则会显示“é”。 我的理解是浏览器发送一个用UTF-8(%C3%A9)编码的“é”。 但服务器将其解释为ISO-8859-1。 所以%C3被解码为Ã而%A9被解码为©,然后发回以UTF-8编码的响应。 在代码中,请求应使用UTF-8解码: request.setCharacterEncoding(“UTF-8”); 但是,如果我发送这个url: http://localhost:8080/kjd/index.jsp?q=%E9 “%E9”用ISO-8859-1表示,显示“é”。 为什么这不起作用? 为什么请求使用ISO-8859-1进行解码? 我在Tomcat 6和7以及Windows和Ubuntu上尝试过它。