Java OSGi捆绑包不';t显示utf-8字符
在我的Bundle中,我试图显示utf-8字符,我假设我的默认字符集是Cp1250,出现了奇怪的行为:Java OSGi捆绑包不';t显示utf-8字符,java,encoding,osgi,Java,Encoding,Osgi,在我的Bundle中,我试图显示utf-8字符,我假设我的默认字符集是Cp1250,出现了奇怪的行为: public class Activator implements BundleActivator { public void start(BundleContext context) throws Exception { System.out.println("ąśżłóę"); // this is what should've been displayed
public class Activator implements BundleActivator {
public void start(BundleContext context) throws Exception {
System.out.println("ąśżłóę"); // this is what should've been displayed
System.out.println("������"); // this is the utf8 above encoded to cp1250
}
public void stop(BundleContext context) throws Exception {
}
public static void main(String args[]){
System.out.println("ąśżłóę"); //utf-8
System.out.println("������"); //cp1250
}
}
输出当我运行main时,我得到了我期望的结果:
ąśżłóę
ąśżłóę
输出当我从OSGi框架启动包时,字符从utf-8编码为cp1250。所以输出正好相反
ąśżłóę
ąęźł
所以我的问题是:如何应对?我应该用cp1250而不是utf-8编写应用程序吗?或者可以更改osgi的默认字符集吗?因为osgi没有对默认字符集做任何操作。听起来像是在IDE中运行一个测试,它给出了正确的结果,但是当OSGi框架启动时,JVM正在从操作系统默认值(windows?)获取字符集
使用
-Dfile.encoding=UTF-8启动框架(更多信息请参见)如果AIK OSGi不对默认字符集做任何操作。听起来像是在IDE中运行一个测试,它给出了正确的结果,但是当OSGi框架启动时,JVM正在从操作系统默认值(windows?)获取字符集
用-Dfile.encoding=UTF-8开始您的框架(更多信息请参见)一些注意事项:
- 编译Java源代码时,确保与编辑器编码匹配(IDE中通常没有问题)
- 在运行时,Java字符串总是UTF-16(类格式将文本存储为修改的UTF-8,但开发人员不必担心这一点)
System.out
将UTF-16字符串转码到;如果编码不是Unicode,则这可能是一个有损过程
- 如果
stdout
流消费者(控制台或任何其他应用程序)未使用相同的编码对其输入进行解码,则可能会发生字符损坏
- 在JRE中没有更改默认平台编码的方法(包括使用
-Dfile.encoding=foo
)
如何更正输出取决于您试图写入的设备。有关cmd.exe,请参阅和。有关Java编码的更多一般信息,请参阅。一些注意事项:
- 编译Java源代码时,确保与编辑器编码匹配(IDE中通常没有问题)
- 在运行时,Java字符串总是UTF-16(类格式将文本存储为修改的UTF-8,但开发人员不必担心这一点)
System.out
将UTF-16字符串转码到;如果编码不是Unicode,则这可能是一个有损过程
- 如果
stdout
流消费者(控制台或任何其他应用程序)未使用相同的编码对其输入进行解码,则可能会发生字符损坏
- 在JRE中没有更改默认平台编码的方法(包括使用
-Dfile.encoding=foo
)
如何更正输出取决于您试图写入的设备。有关cmd.exe,请参阅和。有关Java编码的更多一般信息,请参阅。您的开发环境是什么?捆绑包的构建过程是否与非osgi代码相同?您的开发环境是什么?捆绑包的构建过程是否与非osgi代码相同?