Java OSGi捆绑包不';t显示utf-8字符

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

在我的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
        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代码相同?