code

"UTF-8 인코딩에 매핑 할 수없는 문자"오류

codestyles 2020. 11. 25. 07:59
반응형

"UTF-8 인코딩에 매핑 할 수없는 문자"오류


다음 방법에서 컴파일 오류가 발생합니다.

public static boolean isValidPasswd(String passwd) {
    String reg = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$";
    return Pattern.matches(reg, passwd);
}
Utility.java:[76,74] 매핑 할 수없는 문자 
enoding UTF-8. 74 번째 문자는 '' '

이 문제를 어떻게 해결할 수 있습니까? 감사.


소스 코드 파일에 인코딩 문제가 있습니다. ISO-8859-1로 인코딩되었을 수 있지만 컴파일러는 UTF-8을 사용하도록 설정되었습니다. 이로 인해 UTF-8 및 ISO-8859-1에서 동일한 바이트 표현이없는 문자를 사용할 때 오류가 발생합니다. 이것은 ASCII의 일부가 아닌 모든 문자 (예 : ¬ NOT SIGN)에 발생 합니다.

다음 프로그램으로이를 시뮬레이션 할 수 있습니다. 소스 코드 줄을 사용하고 ISO-8859-1 바이트 배열을 생성하고 UTF-8 인코딩으로 "잘못된"코드를 디코딩합니다. 선이 어느 위치에서 손상되었는지 확인할 수 있습니다. ISO-8859-1 인코딩과 UTF-8 인코딩에서 다른 바이트를 생성하는 유일한 문자 인 ¬ NOT SIGN 에 맞도록 74 번 위치에 맞추기 위해 소스 코드에 2 개의 공백을 추가했습니다 . 나는 이것이 실제 소스 파일과 들여 쓰기를 일치시킬 것이라고 생각합니다.

 String reg = "      String reg = \"^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¬.,-])(?=[^\\s]+$).{8,24}$\";";
 String corrupt=new String(reg.getBytes("ISO-8859-1"),"UTF-8");
 System.out.println(corrupt+": "+corrupt.charAt(74));
 System.out.println(reg+": "+reg.charAt(74));     

결과적으로 다음과 같은 출력이 나타납니다 (마크 업으로 인해 혼란 스러움).

문자열 reg = "^ (? =. [0-9]) (? =. [az]) (? =. [AZ]) (? =. [~ #; :? / @ &!" '% * = .,-]) (? = [^ \ s] + $). {8,24} $ ";:

문자열 reg = "^ (? =. [0-9]) (? =. [az]) (? =. [AZ]) (? =. [~ #; :? / @ &!" '% * = ¬.,-]) (? = [^ \ s] + $). {8,24} $ ";: ¬

https://ideone.com/ShZnB 에서 "live"를 참조하십시오.

이 문제를 해결하려면 UTF-8 인코딩으로 소스 파일을 저장하십시오.


2000 년에 시작된 레거시 시스템 용 Linux 상자에 CI 빌드 서버를 설정하는 중입니다. UTF8이 아닌 문자를 포함하는 PDF를 생성하는 섹션이 있습니다. 출시의 마지막 단계에 있으므로 슬픔을주는 캐릭터를 교체 할 수 없지만 Dilbertesque의 이유로 출시 후이 문제를 해결하기 위해 일주일을 기다릴 수 없습니다. 다행히도 Ant의 "javac"명령에는 "encoding"매개 변수가 있습니다.

 <javac destdir="${classes.dir}" classpathref="production-classpath" debug="on"
     includeantruntime="false" source="${java.level}" target="${java.level}"

     encoding="iso-8859-1">

     <src path="${production.dir}" />
 </javac>

Java 컴파일러는 입력을 지정했거나 플랫폼 기본 인코딩이기 때문에 입력이 UTF-8로 인코딩되었다고 가정합니다.

그러나 .java파일 의 데이터는 실제로 UTF-8로 인코딩되지 않습니다. 문제는 아마도 ¬캐릭터 일 것입니다 . 선택한 편집기 (또는 IDE)가 실제로 해당 파일을 UTF-8 인코딩으로 보호하는지 확인하십시오.


귀하의 답변에 대해 Michael Konietzka ( https://stackoverflow.com/a/4996583/1019307 )에게 감사드립니다 .

Eclipse / STS에서이 작업을 수행했습니다.

Preferences > General > Content Types > Selected "Text" 
    (which contains all types such as CSS, Java Source Files, ...)
Added "UTF-8" to the default encoding box down the bottom and hit 'Add'

빙고, 오류가 사라졌습니다!


IntelliJ 사용자의 경우 원래 인코딩이 무엇인지 알아 내면 매우 쉽습니다. 창의 오른쪽 하단 모서리에서 인코딩을 선택할 수 있으며 다음과 같은 대화 상자가 나타납니다.

선택한 인코딩 ( '[인코딩 유형]')에 따라 '[내 파일]'의 내용이 변경 될 수 있습니다. 디스크에서 파일을 다시로드하거나 텍스트를 변환하고 새 인코딩으로 저장 하시겠습니까?

따라서 일부 이상한 인코딩으로 저장된 몇 개의 문자가있는 경우 먼저 '다시로드'를 선택하여 잘못된 문자의 인코딩으로 파일을 모두로드해야합니다. 나를 위해 이것은? 문자를 적절한 값으로 변경합니다.

IntelliJ는 올바른 인코딩을 선택하지 않았을 가능성이 가장 높은지 알려줄 수 있으며 경고합니다. 되돌아 가서 다시 시도하십시오.

잘못된 문자가 사라지는 것을 확인한 후 오른쪽 하단 모서리의 인코딩 선택 상자를 원래 의도 한 형식으로 다시 변경합니다 (이 오류 메시지를 검색하는 경우 UTF-8 일 가능성이 있음). 이번에는 대화 상자에서 '변환'버튼을 선택하십시오.

저에게는 'windows-1252'로 다시로드 한 다음 'UTF-8'로 다시 변환해야했습니다. 문제가되는 문자는 잘못된 인코딩으로 Word 문서 (또는 전자 메일)에서 붙여 넣은 작은 따옴표 ( '및')였으며 위의 작업을 수행하면 UTF-8로 변환됩니다.


Eclipse에서 파일 속성 ( Alt+ Enter) 으로 이동 하여 Resource→ ' Text File encoding'→ OtherUTF-8. 파일을 다시 열고 문자열 / 파일 어딘가에 정크 문자가 있는지 확인하십시오. 그것을 제거하십시오. 파일을 저장하십시오.

인코딩 리소스 → ' Text File encoding'를 다시 기본값으로 변경합니다 .

코드를 컴파일하고 배포합니다.


The compiler is using the UTF-8 character encoding to read your source file. But the file must have been written by an editor using a different encoding. Open your file in an editor set to the UTF-8 encoding, fix the quote mark, and save it again.

Alternatively, you can find the Unicode point for the character and use a Unicode escape in the source code. For example, the character A can be replaced with the Unicode escape \u0041.

By the way, you don't need to use the begin- and end-line anchors ^ and $ when using the matches() method. The entire sequence must be matched by the regular expression when using the matches() method. The anchors are only useful with the find() method.


The following compiles for me:

class E{
   String s = "^(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z])(?=.*[~#;:?/@&!\"'%*=¼.,-])(?=[^\\s]+$).{8,24}$";
}

See:

enter image description here


"error: unmappable character for encoding UTF-8" means, java has found a character which is not representing in UTF-8. Hence open the file in an editor and set the character encoding to UTF-8. You should be able to find a character which is not represented in UTF-8.Take off this character and recompile.


I observed this issue while using Eclipse. I needed to add encoding in my pom.xml file and it resolved. http://ctrlaltsolve.blogspot.in/2015/11/encoding-properties-in-maven.html

참고URL : https://stackoverflow.com/questions/4995057/unmappable-character-for-encoding-utf-8-error

반응형