我正在开发的应用程序将被Western&东欧以及美国。我正在对输入进行编码并使用UTF-8字符集解码输出。
当我使用这个方法时,我的困惑是String(byte [] bytes,String charsetName),当它真的是一个字符编码时,我提供了UTF-8作为charsetname。我的默认econding在Eclipse中设置为Cp1252。
这是否意味着,如果在我的Java应用程序中的美国,我使用Cp1252作为我的字符集编码创建一个输出文本文件,而UTF-8作为我的字符集名称,那么欧洲的人们是否能够在我的Java文件中读取此文件Java应用程序,反之亦然?
答案 0 :(得分:11)
他们是编码。遗憾的是,当Java真正意味着“编码”时,它会在所有地方使用“charset”,但现在很难修复:(恼人地,IANA made the same mistake。
实际上,根据Unicode terminology,他们可能最准确character encoding schemes:
字符编码形式加字节序列化。 Unicode中有七种字符编码方案:UTF-8,UTF-16,UTF-16BE,UTF-16LE,UTF-32,UTF-32BE和UTF-32LE。
字符编码形式为:
从字符集定义映射到用于表示数据的实际代码单元。
是的,Unicode只定义了七种字符编码形式这一事实使得这更令人困惑。从根本上说,所有大多数开发人员需要知道的是,Java术语中的“charset”是文本数据(String
,char[]
)和二进制数据({{1 }})。
答案 1 :(得分:1)
我认为这两件事并没有直接关系。
Eclipse设置决定eclipse编辑器如何保存您创建/编辑的文本文件(通常是源代码)。您可以使用其他编辑器,因此文件可能会保存在其他编码方案中。只要您的java编译器编译源代码没有问题,您就是安全的。
在
java String(byte[] bytes, String charsetName)
是您自己的应用程序逻辑,它处理您如何解释从文件或网络读取的某些数据。不同的charsetName(本质上是不同的字符编码方案)可能对字节数组有不同的解释。
答案 2 :(得分:1)
“charset”确实意味着文本使用的字符集。对于UTF-8/16,字符集恰好是“所有”字符。对于其他人,不一定。在这些日子里,每个人都在发明自己的字符集和编码方案,两者几乎是一对一的映射,因此一个名称可以用来指代字符集和编码方案。