来自java。lang.StringCodeing:
String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;
这就是从Java.lang.getBytes()中使用的,在linux jdk 7中,我一直认为UTF-8是默认字符集?
谢啦
这是出于兼容性的原因。
从历史上看,Windows和Unix上所有未指定字符集的java方法当时都使用通用字符集,即"ISO-8859-1"
。
正如Isaac和javadoc所提到的,使用默认的平台编码(参见Charset.java):
594 public static Charset defaultCharset() {
595 if (defaultCharset == null) {
596 synchronized (Charset.class) {
597 String csn = AccessController.doPrivileged(
598 new GetPropertyAction("file.encoding"));
599 Charset cs = lookup(csn);
600 if (cs != null)
601 defaultCharset = cs;
602 else
603 defaultCharset = forName("UTF-8");
604 }
605 }
606 return defaultCharset;
607 }
在进行字符串到字节或字节到字符串的转换时,始终指定字符集。
即使是在这种情况下,如字符串。getBytes()您仍然可以找到一个没有采用字符集的未弃用方法(当Java 1.1出现时,大多数方法都已弃用)。就像endianness一样,平台格式是不相关的,相关的是存储格式的规范。
无参数String.getBytes()
方法默认不使用ISO-8859-1。如果可以确定,它将使用默认平台编码。但是,如果缺少或是无法识别的编码,它会退回到ISO-8859-1作为“默认默认值”。
您应该很少在实践中看到这一点。通常会正确检测到平台默认编码。
然而,我强烈建议您在每次执行编码或解码操作时指定显式字符编码。即使您想要平台默认值,也要明确指定。
Java尝试使用默认字符编码使用String.getBytes()返回字节。
......这是棘手的部分(可能永远不会发挥作用)......
如果系统无法使用默认字符集(UTF-8或其他字符集)对字符串进行解码或编码,则将退回到ISO-8859-1。如果回退不起作用。。。系统将出现故障!
。。。。真正地(喘息!)。。。如果无法使用指定的字符集,并且UTF-8或ISO-8859-1也不可用,它会崩溃吗?
是的。StringCoding.encode(...)方法中的Java源注释状态:
//如果我们找不到ISO-8859-1(一种必需的编码),那么安装就严重错误。
。。。然后它调用系统。出口(1)
用户JVM可能不支持UTF-8或JVM启动时指定的字符集中的解码和编码,尽管可能性不大。
那么,默认字符集是否在getBytes()期间在String类中正确使用?
不。不过,更好的问题是。。。
Javadoc中定义的合同是正确的。
当此字符串无法在默认字符集中编码时,此方法的行为未指定。当需要对编码过程进行更多控制时,应使用CharsetEncoder
类。
在将字节转换为字符串(反之亦然)时,通常建议显式指定“ISO-8859-1”或“US-ASCII”或“UTF-8”或任何您想要的字符集,除非您之前已获得默认字符集并百分之百确保它是您需要的字符集。
改用此方法:
public byte[] getBytes(String charsetName)
要查找系统的默认值,只需使用:
Charset.defaultCharset()
希望这有帮助。
问题内容: 我有一个FTP客户端类,它返回指向该文件的InputStream。我想用BufferedReader逐行读取文件。问题是,客户端以二进制模式返回文件,并且文件具有ISO-8859-15编码。 问题答案: 如果文件/流/任何内容真正包含ISO-8859-15编码的文本,则只需在创建InputStreamReader时指定它: 然后,将以Java的本机编码(为UTF-16,而不是UTF-8
问题内容: 我正在开发一个项目,我们需要将我们的信息保存在具有ISO-8859-1表的旧数据库中。因此,在向数据库中写入内容之前,我需要将其从UTF-8转换为ISO-8859-1,并且每次从数据库中检索到它时,都需要将其转换回UTF-8。 我试图将库 **code.google.com/p/go-charset/** 用作以下每个我需要保留的文本字段。 问题是即使使用 toISO88591 函数,
问题内容: 我有ISO-8859-1数据库,所以我希望完全在此代码页中交换请求。那么,如何以正确的方式设置AJAX请求的内容类型呢? 问题答案: 即使这样做很不好(上面有很多评论),也可以:
这就是我现在拥有的: 这确实有效,但似乎NSData使用UTF-8作为输出字符集。但是我需要ISO-8859-1输出字符集中的数据来获得正确的解码。默认设置(UTF-8)失败。 是否有的选项,或者我必须使用C#将其转换? 编辑: 我可以假设ASCII是ISO-8859-1吗? 我认为没有。
在我的nodeJS应用程序中,我使用以下代码行获取req。身体 这工作正常,但对我的应用程序的一个请求会引发以下错误: 如果删除前一行,则该行适用于该请求,但在所有其他请求中,我无法检索数据。有办法解决这个问题吗?