我正在使用专有API在eclipse中开发一个Java程序,它在运行时抛出以下异常:
java.io.UnsupportedEncodingException:
at java.lang.StringCoding.encode(StringCoding.java:287)
at java.lang.String.getBytes(String.java:954)...
我的代码:
private static String SERVER = "localhost";
private static int PORT = 80;
private static String DFT="";
private static String USER = "xx";
private static String pwd = "xx";
public static void main(String[] args) {
LLValue entInfo = new LLValue();
LLSession session = new LLSession(SERVER, PORT, DFT, USER, pwd);
try {
LAPI_DOCUMENTS doc = new LAPI_DOCUMENTS(session);
doc.AccessPersonalWS(entInfo);
} catch (Exception e) {
e.printStackTrace();
}
}
会话似乎打开但没有错误,但在doc.AccessEnterpriseWS(entInfo)中抛出了编码异常
通过研究此错误,我尝试使用编译器的-encoding选项,更改编辑器的编码等。
我的问题是:
答案 0 :(得分:3)
在调试器中使用String.getBytes()
或StringCoding.encode()
上的断点运行它。两者都是JDK中的类,因此您可以访问它们,并且应该能够看到第三方传入的内容。
character encoding用于指定如何解释原始二进制文件。 CP1252中英文Windows系统的默认编码。其他语言和系统可以使用不同的默认编码。作为快速测试,您可以尝试指定UTF-8以查看问题是否神奇地消失。
如this question所述,JVM使用操作系统的默认编码,但您可以覆盖此默认编码。
在不了解您尝试使用的第三方API的情况下,很难说他们可能使用的是哪种编码。不幸的是,通过查看StringCoding.encode()
的实现情况,您可以通过几种不同的方式获得UnsupportedEncodingException
。单步执行调试器应该有助于缩小范围。
答案 1 :(得分:0)
在我看来,好像专有API中的某些东西正在使用字符集的空字符串调用String.getBytes
。
我编译了以下类
public class Test2 {
public static void main(String[] args) throws Exception {
"test".getBytes("");
}
}
当我运行它时,我得到了以下stacktrace:
Exception in thread "main" java.io.UnsupportedEncodingException: at java.lang.StringCoding.encode(StringCoding.java:286) at java.lang.String.getBytes(String.java:954) at Test2.main(Test2.java:3)
如果这与编写类文件的编码有关,我会感到惊讶。它看起来像这是代码的问题,而不是你可以通过更改文件编码或编译器/ JVM开关来解决的问题。
我不知道这个专有API应该做什么或它是如何工作的。也许它期望在Java EE或Web应用程序容器中运行?也许它有一个bug?也许它需要更多配置才能运行而不抛出异常?鉴于它是专有的,你能得到供应商的任何支持吗?