Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java中从编码中查找语言环境_Java_Xml_Encoding_Locale - Fatal编程技术网

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

如何在java中从编码中查找语言环境,java,xml,encoding,locale,Java,Xml,Encoding,Locale,我有一个组件,它应该能够解析和处理用户给定的任何xml文件。xml文件可以包含时间戳值,如“2012年3月12日下午5:00”。因此,用户必须给出SimpleDataFormat可以接受的时间戳模式。我们使用模式和SimpleDataFormat解析时间戳值,如下所示: SimpleDateFormat sdt = new SimpleDateFormat(inputTimestampPattern); Date date = sdt.parse(inputTimestampString);

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

 SimpleDateFormat sdt = new SimpleDateFormat(inputTimestampPattern);
 Date date = sdt.parse(inputTimestampString);
但对于一个特定的文件,我们得到了如下所示的ParseException

java.text.ParseException:无法解析的日期:“04-6\u57d6-12 18.54:57.169000\u548c\u601c”

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

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


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


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

如果在XML的第一行中设置编码,您可以先读取文件,只获取第一行,因此将捕获“encoding=“gbk”或其他内容。
在程序中使用开关设置编码,或者按照您的意愿设置编码

这看起来是一件非常棘手的事情,“因此用户必须给出SimpleDataFormat可以接受的时间戳模式”,为什么要为这种复杂性而烦恼呢?为什么不要求标准ISO格式呢。XML作为一个用户界面不是很好,那么为什么还要费心在猪身上涂口红呢?“从编码中找出语言环境”这是不可能的。UTF-8的语言环境是什么?US-ASCII的区域设置不是US;可能是英国。“为什么要为这种复杂性而烦恼?”我们需要这种复杂性是因为我们的组件是一个xml日志解析器。xml文件可以是从随机源生成的日志(我们甚至可能不知道),我们应该能够处理它们。看看这篇文章:有一个建议使用“getEncoding()”方法……“使用开关大小写设置程序中的编码…”和“使用开关大小写设置程序中的区域设置”是什么意思?如果是,我想知道从编码到语言环境的映射。我可以硬编码。你能告诉我在哪里可以找到这些地图信息吗?此外,它可能不是一份全面的清单。假设编码是UTF-8,我们可能没有相应的区域设置。因此,在这种情况下,我们可以使用JVM的语言环境。