화면에 스페인어 악센트가 포함 된 문자열을 인쇄하려고했습니다. 동일한 입력으로 다른 답변을 얻지 만 접근 방식이 다릅니다.
첫 번째 접근 방식은 스캐너 클래스를 통해 스페인어 악센트가 포함 된 문자열을 읽는 것입니다.
//input is a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ
Scanner sc = new Scanner(System.in);
System.out.println("Enter some spanish chars next: ");
String spanishLine = sc.nextLine();
try {
System.out.println("Output from Scanner: " + spanishLine);
System.console().writer().println(spanishLine);
} catch (Exception e) {
}
두 번째 apporche는이 웹리스트에서 찾은 것입니다. http://www.rgagnon.com/javadetails/java-0046.html
String s = "a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ";
try {
System.out.println("Output from System.console: " + s);
System.console().writer().println(s);
} catch (Exception e) {
}
내 결과는 다음과 같습니다
Enter some spanish chars next:
a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ
output from Scanner: a � e � i � o � u � A � E � I � O � U � � �
output from System.console: a á e é i í o ó u ú A Á E É I Í O Ó U Ú Ñ ñ
누구든지 동일한 입력에서 두 가지 다른 답변을 얻는 이유를 설명 할 수 있습니까? 두 번째 접근 방식과 동일한 결과를 얻기 위해 첫 번째 접근 방식을 어떻게 수정할 수 있습니까?
대답이 아님
여전히 몇 가지 사항을 확인해야합니다.
Java 컴파일러에서 사용하는 Java 소스 인코딩은 텍스트 / 편집기의 인코딩과 동일해야합니다.
기본 인코딩을 확인하십시오.
System.out.println(System.getProperty("file.encoding"));
System.out / console을 파일로 리디렉션합니다.
IDE가 아닌 실제 콘솔을 사용해보십시오 .
나는 그 행동이 어리둥절하다는 것을 알았다. 스캐너가 UTF-8 인코딩 문자 집합을 가져 와서 US-ASCII에 써야하는 것처럼 보이므로 umappable 문자는 �
. 그럴 수 없습니다. 스캐너가 "버기"인 것 같습니다.
문자열 덤프를 시도하십시오.
for (int i = 0; i < s.length(); ) {
int cp = s.codePointAt(i);
System.out.printf(" %x", cp);
i += Character.charCount(cp);
}
System.out.println();
(일반적으로 완료되지 않음)
System.setProperty("file.encoding","Windows-1252");
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다