2011-11-21 1 views
2

Java IRQ 클라이언트를 자바 스크립트 및 Java 애플릿 (소켓 용으로 사용하고 있습니다. 이전에 Flash를 사용 했었지만 엄격한 보안 제한이 있으므로 서버에서 연결이 제한되어 있습니다. 그래서 이전에 사용하지 않은 Java 애플릿을 사용하기 시작 했으므로 <applet>을 사용하고, 애플릿을 컴파일하고, jar에 서명하는 등 많은 문제가있었습니다. 이상한 현상이 있습니다. 문자열이 Java 애플릿 (같은 irc.sendLine("foobar")), 코드 65533(�) 또는 127, 때로는 ASCII에서 110 또는 숫자 (()와 같은 다른 것들 가끔 문자로 자바 스크립트에서 전달되는Javascript에서 Java 애플릿으로 문자열을 전달할 때 문자열이 이상하게 변경되었습니다.

채워집니다. 그것은 인코딩 문제가 될 수 있지만 그것은 자바와 HTML 페이지에 사용 된 문자셋이 모두 UTF-8이기 때문에 생각하지 않습니다. 문자열이 영숫자로만 구성되어 있어도 발생합니다.

더 이상하게도 그것은 Google 크롬에서만 발생합니다. 파이어 폭스에는 패딩이 없다. (괜찮다.)

문제를 디버깅하기 위해 자바 애플릿 코드를 수정했다. 다음은

내 코드의 일부 ( traceStr 인쇄 자바 스크립트 콘솔에 문자열)
public void sendLine(String s){ 
    traceStr(dumpStr(s)); 
} 
private String dumpStr(String s){ 
    String result = ""; 
    for(int i=0;i<s.length();i++){ 
     result += s.codePointAt(i); 
     if(i<s.length()-1) result += " "; 
    } 
    return result; 
} 

sendLine

irc.sendLine("foobar")처럼, JS 콘솔을 사용하여 호출이다. ,

84 104 101 32 113 117 105 99 107 32 98 114 111 119 110 32 102 111 120 65533 65533 127 

출력 위한 天1, 天11, 天111天地을 :

22825 65533 65533 127 
22825 49 65533 127 
22825 49 49 127 
22825 49 49 49 
22825 22320 
여기

48 40 65533 
48 48 65533 65533 65533 127 
48 48 48 65533 65533 127 
48 48 48 48 65533 127 
48 48 48 48 48 127 
48 48 48 48 48 48 
48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 99 111 110 110 101 99 116 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 65533 65533 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 65533 65533 127 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 65533 127 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 65533 127 
48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 127 

출력 The quick brown fox 경우 (반복 0 추가) 일부 출력의

우분투 11.10에서 Google 크롬 17.0.932.0 및 Java 1.6.0_23을 사용하고 있습니다. 플래시를 사용할 때 이런 일은 발생하지 않았습니다. 누구든지 내가 잘못한 것을 확인할 수 있습니까? 출력에서 나는 UTF-8와 관련하여 뭔가 잘못되었다고 생각하지만, 더 이상 모른다는 것을 알고 있습니다 ...

그런데 내가 발견 한 이와 같은 많은 질문에 대한 답은 ISO-8859-1이지만이 문제와 관련이 있습니까?

답변

0

JavaScript는 UTF-16입니다. 따라서 UTF-16에서 UTF-8 로의 변환은 의도하지 않은 부작용으로 발생할 수 있습니다. 십진수 127자를 초과하는 문자에 대해 에스페셜을 지정하십시오.

+0

필자는 그것에 대해 생각했지만 파이어 폭스의 출력이 OK 인 이유를 설명하지 않습니다 (FF는 UTF-16도 사용하는 것 같습니다). 그리고 그 문제를 해결하는 방법을 말하지 않습니다 ... ( – JiminP

+0

IE와 Safari는 어떨까요? Chrome이 예외 일 수 있습니다! –

+0

Windows (Google 크롬 카나리아 및 Firefox)에서 테스트했으며 두 가지 모두 작동합니다. (IE를 테스트하지는 않았지만 괜찮을 수 있습니다.) ... 그래서, 이것이 Chrome의 문제입니다. :/ – JiminP

관련 문제