API抛出java.io.UnsupportedEncodingException
我正在eclipse中使用专有API开发一个Java程序,它在运行时抛出以下异常:API抛出java.io.UnsupportedEncodingException,java,Java,我正在eclipse中使用专有API开发一个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"; priva
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选项,更改编辑器的编码,等等
我的问题是:
Cheers在调试器中运行它,断点位于
String.getBytes()
或StringCoding.encode()
。这两个类都是JDK中的类,因此您可以访问它们,并且应该能够看到第三方传入的内容
用于指定如何解释原始二进制文件。CP1252中英文Windows系统上的默认编码。其他语言和系统可能使用不同的默认编码。作为一个快速测试,您可以尝试指定UTF-8,看看问题是否神奇地消失了
如中所述,JVM使用操作系统的默认编码,尽管您可以覆盖此默认编码
如果不了解更多关于您尝试使用的第三方API的信息,就很难说他们可能会使用什么编码。不幸的是,从
StringCoding.encode()
的实现来看,似乎有几种不同的方法可以获得不支持的编码异常。使用调试器单步执行应该有助于缩小范围。在我看来,专有API中的某个东西似乎正在使用字符集的空字符串调用String.getBytes
我编译了下面的课程
public class Test2 {
public static void main(String[] args) throws Exception {
"test".getBytes("");
}
}
当我运行它时,我得到了以下跟踪:
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)
线程“main”java.io.UnsupportedEncodingException中的异常:
在java.lang.StringCoding.encode(StringCoding.java:286)
位于java.lang.String.getBytes(String.java:954)
位于Test2.main(Test2.java:3)
如果这与编写类文件的编码有关,我会感到惊讶。在我看来,这是代码的问题,而不是可以通过更改文件编码或编译器/JVM开关来修复的问题
我不知道这个专有API应该做什么,也不知道它是如何工作的。也许它期望在JavaEE或web应用程序容器中运行?也许它有一个bug?也许它需要更多的配置才能在不引发异常的情况下运行?鉴于它是专有的,您能从供应商那里得到任何支持吗?我喜欢这样的建议,即它可能希望在web应用程序容器中运行——不幸的是,我们从第三方获得了该程序的许可,而他们不愿意支持API,这表明他们更愿意自己进行开发。谢谢你的回答,这非常有帮助!代码的问题:“test”.getBytes(“”);您为“getBytes”方法提供了一个空字符串参数。根据API,它应该是有效的字符集,这就是抛出“UnsupportedEncodingException”的原因。您可以忽略此参数并应用默认操作系统编码,也可以使用有效的编码。@vs777:我的代码没有问题,应该会引发异常。它的目的是演示如何重现异常消息和问题中出现的stacktrace的前几行,它成功地做到了这一点,给出或获取的行号稍有出入。感谢您的全面回答--我没有意识到我可以在导入的类中创建断点!我应该提到的一个缺点是,您可能会在String
或StringCoding
中的方法上发现断点,这些断点经常被绊倒(这些是常用的类)。为了避免单步遍历每个实例,请尝试在感兴趣的方法之前不久在一个不太常用的方法中插入一个中断,然后在该断点触发时向实际要检查的方法添加一个中断。或者,如果您的IDE支持它,则添加一个条件断点,使其仅在您感兴趣的实例上触发。祝你好运