java - 如何从java中的编码中查找语言环境

标签 java xml encoding locale

我有一个组件应该能够解析和处理用户提供的任何 xml 文件。 xml 文件可以包含时间戳值,例如“2012 年 3 月 12 日 05:00 pm”。因此,用户必须提供 SimpleDataFormat 可接受的时间戳模式。我们使用模式和 SimpleDateFormat 来解析时间戳值,如下所示:

 SimpleDateFormat sdt = new SimpleDateFormat(inputTimestampPattern);
 Date date = sdt.parse(inputTimestampString);

但是对于一个特定的文件,我们得到如下所示的 ParseException。

java.text.ParseException: Unparseable date: " 04-6\u57d6 -12 18.54:57.169000 \u548c\u601c"

当我们在日语语言环境中运行组件时,在中文语言环境中使用包含时间戳模式的输入文件时,我们遇到了这个异常。 JVM 的语言环境是日语,因此 SimpleDateFormat 会尝试解析假定日语语言环境的时间戳字符串,但失败了。 xml文件有这样的编码信息:

  <?xml version="1.0" encoding="gbk"?>

如果我们以某种方式从编码值中找出区域设置,那么我们可以创建区域设置敏感的 SimpleDateFormat 对象来解决这个问题。所以我的问题是我们可以从编码中获取区域设置信息吗?我不是在要求确切的语言环境。即使有一种方法可以在给定编码的情况下获得一小组可能的语言环境,我也可以尝试所有这些语言环境,直到其中一个不抛出异常。 Java 中是否有任何 API 可以帮助解决这个问题?

或者有什么更好的方法来解决这个问题?

最佳答案

如果编码设置在 XML 的第一行,您可以先读取文件,只获取第一行,这样会捕获“encoding="gbk""或其他内容。 并使用 Switch-case 或任何你想要的方式在程序中设置编码

关于java - 如何从java中的编码中查找语言环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20192711/

相关文章:

java - Spring框架有几种配置方式?它们在技术上有何区别? (不是优点或缺点..)

java - Lucene 搜索问题

css - 节点 sass : Fontawesome icon encoding issues

css - 在中文浏览器中正确显示CSS字体

java - STS 未拾取 log4j2.xml

java - Swing 布局 - 中心面板滚动多个 JEditorPanes

java - 在Java中,如何创建一个像KeyListener这样的类,如果你扩展它,它会自动调用方法?

java - Spring Boot 1.5.2 启动 : java. lang.NoSuchMethodError : javax. servlet.ServletContext.getVirtualServerName()Ljava/lang/String;

java - 用于处理注释的 Gradle 命令/配置

xml - org.xml.sax.SAXParseExceptionpublicId : http://xmlns. jcp.org/xml/ns/persistence/persistence_2_1.xsd