找不到为什么 jmxRemoteURL 包含非 ASCII 字符

Can not find out WHY jmxRemoteURL contains non-ASCII character

我正在尝试将 Tomcat (v: 9.0.12) 与 Intellij Idea (v: 2018.3) 一起使用来部署工件(一个简单的 hello world javaEE Web 应用程序项目)。

这是我在构建和启动项目后的一些输出(我将把这些输出作为一些有用的信息。你也可以在我的问题末尾找到完整的输出):

"C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\catalina.bat" run
[2019-09-07 10:58:59,049] Artifact test:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE:   "C:\Users\pcs\.IntelliJIdea2018.3\system\tomcat\Tomcat_9_0_12_test"
Using CATALINA_HOME:   "C:\Program Files\Apache Software Foundation\Tomcat 9.0"
Using CATALINA_TMPDIR: "C:\Program Files\Apache Software Foundation\Tomcat 9.0\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk-10.0.1"
Using CLASSPATH:       "C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\tomcat-juli.jar"
Error: Exception thrown by the agent : java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1

在那之后我有一个关于 JMX 的错误,如果我是对的,它发生在:“jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer" (ConnectorBootstrap.java:491).

我把完整的输出放在最后。

在问我问题之前,请先看一下 C:\Program Files\Java\jdk-10.0.1\lib\src.zip!\java 的某些部分。 management\javax\management\remote\JMXServiceURL.java 正如您将看到的那样,它确保 URL 中没有非 ASCII 字符,并且其中包含我的部分答案:

public class JMXServiceURL implements Serializable {

    private static final long serialVersionUID = 8173364409860779292L;

    /**
     * Constructs a JMXServiceURL by parsing a Service URL
     * string.
     *
     * @param serviceURL the URL string to be parsed.
     *
     * @exception NullPointerException if  serviceURL is
     * null.
     *
     *  @exception MalformedURLException if serviceURL
     * does not conform to the syntax for an Abstract Service URL or
     * if it is not a valid name for a JMX Remote API service.  A
     * JMXServiceURL must begin with the string
     * "service:jmx:" (case-insensitive).  It must not
     * contain any characters that are not printable ASCII characters.
     */
    public JMXServiceURL(String serviceURL) throws MalformedURLException {
        final int serviceURLLength = serviceURL.length();

        /* Check that there are no non-ASCII characters in the URL,
           following RFC 2609.  */
        for (int i = 0; i < serviceURLLength; i++) {
            char c = serviceURL.charAt(i);
            if (c < 32 || c >= 127) {
                throw new MalformedURLException("Service URL contains " +
                                                "non-ASCII character 0x" +
                                                Integer.toHexString(c));
            }
        }

你可以在评论中找到@exception MalformedURLException有趣的部分 是我可以看到我的异常消息正在为我准备好:)

我的问题是:如何找到包含非 ASCII 字符的 jmxRemoteURL 值?

这是我已经测试过的:

*最后这是我在 Intellij Idea 控制台中的完整输出:

"C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\catalina.bat" run
[2019-09-07 10:58:59,049] Artifact test:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE:   "C:\Users\pcs\.IntelliJIdea2018.3\system\tomcat\Tomcat_9_0_12_test"
Using CATALINA_HOME:   "C:\Program Files\Apache Software Foundation\Tomcat 9.0"
Using CATALINA_TMPDIR: "C:\Program Files\Apache Software Foundation\Tomcat 9.0\temp"
Using JRE_HOME:        "C:\Program Files\Java\jdk-10.0.1"
Using CLASSPATH:       "C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\bootstrap.jar;C:\Program Files\Apache Software Foundation\Tomcat 9.0\bin\tomcat-juli.jar"
Error: Exception thrown by the agent : java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1
jdk.internal.agent.AgentConfigurationError: java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1
    at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:491)
    at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:450)
    at jdk.management.agent/jdk.internal.agent.Agent.startAgent(Agent.java:621)
Caused by: java.net.MalformedURLException: Service URL contains non-ASCII character 0x6f1
    at java.management/javax.management.remote.JMXServiceURL.<init>(JMXServiceURL.java:157)
    at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.exportMBeanServer(ConnectorBootstrap.java:846)
    at jdk.management.agent/sun.management.jmxremote.ConnectorBootstrap.startRemoteConnectorServer(ConnectorBootstrap.java:479)
    ... 2 more
Disconnected from server

如果我有什么想说的,请告诉我。 非常感谢您的大力帮助。

通过稍微深入了解并进行一些研究,我通过转换意识到 ( 0x6f1 ) 等于 ( 1777 ) 十六进制转十进制在线。似乎有一个非 ASCII 字符,它的( char 到 int )转换结果是 1777.

最后通过转换( int 到 char )我意识到 char 实际上是一个非 ASCII :)

(如CrazyCoder found out) it was EXTENDED ARABIC-INDIC DIGIT ONE

我的 解决方案: 我从我的 windows OS 删除了 波斯语(标准) 语言:控制Panel\All控制面板Items\Language

  • 这是 ( int to char ) java 谁想知道的代码:
int a = 1777;
char c = (char)a;
System.out.println (c);

通过将 Windows 区域格式 从波斯语更改为英语,它为我修复了。