기본 Java 문자 인코딩 설정
JVM(1.5.x)에서 사용하는 기본 문자 인코딩을 프로그래밍 방식으로 올바르게 설정하려면 어떻게 해야 합니까?
라고 읽었습니다-Dfile.encoding=whatever
예전엔 오래된 JVM을 좋아했었는데 그런 사치를 누릴 수 없어요.
시도했습니다.
System.setProperty("file.encoding", "UTF-8");
되지만, 인 원인이 아닌 것 .getBytes
UTF8은 UTF8에 대응하고 있습니다.
System.setProperty("file.encoding", "UTF-8");
byte inbytes[] = new byte[1024];
FileInputStream fis = new FileInputStream("response.txt");
fis.read(inbytes);
FileOutputStream fos = new FileOutputStream("response-2.txt");
String in = new String(inbytes, "UTF8");
fos.write(in.getBytes());
도 ★★★★★★★★★★★★★★★★★.file.encoding
시 까지 JVM이 .인인 、 력력력력,될 ,될 、String.getBytes()
「」를 설정합니다.InputStreamReader
★★★★★★★★★★★★★★★★★」OutputStreamWriter
가 영구적으로 캐시되었습니다.
Edward Grech가 지적한 바와 같이, 이와 같은 특별한 경우 환경변수는JAVA_TOOL_OPTIONS
를 사용하여 이 속성을 지정할 수 있지만 일반적으로 다음과 같이 수행됩니다.
java -Dfile.encoding=UTF-8 … com.x.Main
Charset.defaultCharset()
에는 변경 이 반영됩니다.file.encoding
그러나 기본 문자 인코딩을 결정해야 하는 핵심 Java 라이브러리의 코드 대부분은 이 메커니즘을 사용하지 않습니다.
복호화 시 " " " 를 수 .file.encoding
또는 "Property"Charset.defaultCharset()
현재 기본 인코딩을 검색하여 적절한 메서드 또는 컨스트럭터 오버로드를 사용하여 지정합니다.
JVM™ Tool Interface 설명서 참조...
등 변경할 수 에 명령줄을 할 수 .예를 들어 임베디드 VM이나 단순히 스크립트 내에서 기동하는 VM은 다음과 같습니다.
JAVA_TOOL_OPTIONS
변수는 이러한 경우 에이전트를 시작할 수 있도록 제공됩니다.
(「」)를 JAVA_TOOL_OPTIONS
로로 합니다.-Dfile.encoding=UTF8
( , (Java)System
속성은 JVM이 시작될 때마다 자동으로 설정됩니다.을 알 수 은 다음 가 에 되기 때문입니다.System.err
:
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF8
나는 확실히 잘 되는 방법이 있어!!
System.setProperty("file.encoding","UTF-8");
Field charset = Charset.class.getDeclaredField("defaultCharset");
charset.setAccessible(true);
charset.set(null,null);
이렇게 하면 JVM이 문자 집합이 설정되어 있지 않다고 생각하고 런타임에 UTF-8로 다시 설정되도록 할 수 있습니다.
세트를 보다 특히 뿐만 아니라 을 주는 데 것 같기 에 보다 한 것을 합니다.String.getBytes("charsetName")
이렇게 하면 어플리케이션은 통제할 수 없는 것에 의존하지 않습니다.
으로 을 있다.String.getBytes()
디폴트 문자셋이 변경되었을 가능성이 있는 것을 개발자가 설명하지 않은, 내가 본 많은 사례에서 심각한 문제를 일으켰기 때문에 권장하지 않습니다.
원래의 질문에 대답할 수 없습니다만, JVM의 디폴트 부호화에 의존하지 말아 주세요.항상 코드에 원하는 인코딩(즉, "UTF-8")을 명시적으로 지정하는 것이 가장 좋습니다.이렇게 하면 서로 다른 시스템 및 JVM 구성에서도 사용할 수 있습니다.
다음을 시도해 보십시오.
new OutputStreamWriter( new FileOutputStream("Your_file_fullpath" ),Charset.forName("UTF8"))
여러 가지 시도를 해봤지만, 여기 샘플 코드는 완벽하게 작동합니다.링크
이 코드의 핵심은 다음과 같습니다.
String s = "एक गाव में एक किसान";
String out = new String(s.getBytes("UTF-8"), "ISO-8859-1");
에서 몇 가지 을 체계적으로 시도했지만 이 없었다우리는 이 기사에서 몇 가지 제안을 체계적으로 시도했지만 소용이 없었다. VIP를 .-Dfile.encoding=UTF8
무무도효효효효효효것것것것
있는 에게 다음 이 되었습니다.일 설정이 깨지는지를 .unicode/UTF-8
Java/Tomcat
http://www.jvmhost.com/articles/locale-breaks-unicode-utf-8-java-tomcat
의 올바른 ~/.bashrc
파일은 우리에게 효과가 있었다.
Spring Boot file.encoding
JVM을 사용하다
mvn spring-boot:run -Drun.jvmArguments="-Dfile.encoding=UTF-8"
하던 것이었기 때문에 필요했습니다.JTwig
에는 「」가 있습니다.ANSI_X3.4-1968
저희가 알게 된 건System.out.println(System.getProperty("file.encoding"));
이게 누군가에게 도움이 되길 바라!
저희 팀은 Windows 탑재 머신에서도 같은 문제가 발생하였습니다.그 후, 다음의 2개의 방법으로 해결 방법에 성공했습니다.
a) 환경변수 설정(Windows 시스템 설정에서도)
JAVA_도구_옵션
- - Dfile.encoding=UTF8
b) pom.xml에 다음 스니펫을 도입합니다.
-Dfile.encoding=UTF-8
이내에
<jvmArguments>
-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8001
-Dfile.encoding=UTF-8
</jvmArguments>
Amazon(AWS) Elastic Beanstalk를 사용하고 있는데 UTF-8로 변경에 성공했습니다.
Elastic Beanstalk software 、 [ Configuration ]> [ Software ]순서대로 "Environment properties" 를 선택합니다.(이름) JAVA_ 추가TOOL_OPTIONS with (값) -Dfile.encoding=UTF8
저장 후 환경은 UTF-8 인코딩으로 재시작됩니다.
내 프로젝트에서 이 문제를 해결하세요.도움이 됐으면 좋겠는데
저는 LIBGDX java framework를 사용하고 있으며 안드로이드 스튜디오 프로젝트에서도 이 문제가 있었습니다.Mac OS에서는 인코딩이 올바르지만 Windows 10에서는 특수 문자와 기호 및 러시아어 문자가 다음과 같은 질문으로 표시됩니다.
Android Studio ★★★★★★★★★★★★★★★★★★★★★★★:
File->Settings...->Editor-> File Encodings
UTF-8로 이동합니다(아래의 글로벌 부호화, 프로젝트 부호화 및 기본값).임의의 Java 파일 세트:
System.setProperty("file.encoding","UTF-8");
테스트 인쇄 디버깅 로그의 경우:
System.out.println("My project encoding is : "+ Charset.defaultCharset());
당신이 무엇을 하는지 명확하지 않고 현재로선 통제할 수 없다.대상 파일에 다른 OutputStream 클래스를 삽입할 수 있는 경우 정의한 문자 집합에서 문자열을 바이트로 변환하는 OutputStream 서브유형을 사용할 수 있습니다(기본적으로는 UTF-8). 변경된 UTF-8을 사용할 수 .DataOutputStream.writeUTF(String)
:
byte inbytes[] = new byte[1024];
FileInputStream fis = new FileInputStream("response.txt");
fis.read(inbytes);
String in = new String(inbytes, "UTF8");
DataOutputStream out = new DataOutputStream(new FileOutputStream("response-2.txt"));
out.writeUTF(in); // no getBytes() here
이 접근방식이 실현 가능하지 않은 경우 데이터 흐름과 실행 환경의 관점에서 제어할 수 있는 것과 제어할 수 없는 것을 여기에서 명확히 하는 것이 도움이 될 수 있습니다(단, 때로는 결정보다 말하기가 쉽다는 것을 알고 있습니다).행운을 빌어요.
mvn clean install -Dfile.encoding=UTF-8 -Dmaven.repo.local=/path-to-m2
명령어는 jenkins 작업 설정 중 exec-maven-timeout과 연계하여 다음 오류를 해결합니다.
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
Error occurred during initialization of VM
java.nio.charset.IllegalCharsetNameException: "UTF-8"
at java.nio.charset.Charset.checkName(Charset.java:315)
at java.nio.charset.Charset.lookup2(Charset.java:484)
at java.nio.charset.Charset.lookup(Charset.java:464)
at java.nio.charset.Charset.defaultCharset(Charset.java:609)
at sun.nio.cs.StreamEncoder.forOutputStreamWriter(StreamEncoder.java:56)
at java.io.OutputStreamWriter.<init>(OutputStreamWriter.java:111)
at java.io.PrintStream.<init>(PrintStream.java:104)
at java.io.PrintStream.<init>(PrintStream.java:151)
at java.lang.System.newPrintStream(System.java:1148)
at java.lang.System.initializeSystemClass(System.java:1192)
2개의 시스템 속성을 함께 설정하면 시스템이 모든 것을 utf8로 가져옵니다.
file.encoding=UTF8
client.encoding.override=UTF-8
승인된 답변에 대한 @Caspar 코멘트에 이어 Sun에 따라 이를 수정하는 바람직한 방법은 다음과 같습니다.
"Java 프로그램을 시작하기 전에 기본 플랫폼의 로케일을 변경하십시오."
http://bugs.java.com/view_bug.do?bug_id=4163515
도커에 대해서는, 다음을 참조해 주세요.
http://jaredmarkell.com/docker-and-locales/
최근에 한 로컬 회사의 Notes 6.5 시스템과 마주쳤는데, Zhongwen이 아닌 Windows 설치에서 웹 메일에 식별할 수 없는 문자가 표시된다는 것을 알게 되었습니다.몇 주 동안 온라인에서 조사했는데, 몇 분 전에 알아냈어요.
Java 속성에서 런타임 매개 변수에 다음 문자열을 추가합니다.
-Dfile.encoding=MS950 -Duser.language=zh -Duser.country=TW -Dsun.jnu.encoding=MS950
이 경우 UTF-8 설정은 기능하지 않습니다.
응용 프로그램을 시작할 때 jvm 인수를 설정하면 이 문제를 해결하는 데 도움이 되었습니다. java -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
.
file.encoding=UTF-8
이에는 유니코드 유니코드 문자가 포함되어 있습니다.
sun.jnu.encoding=UTF-8
파일 시스템에서 유니코드 문자를 파일 이름으로 사용할 수 있습니다.
AZURE를 사용하는 경우 webapp-component.yml에서 다음 설정을 사용합니다.
systemProperties:
file.encoding: "UTF8"
client.encoding.override: "UTF-8"
메모: 요청하신 인코딩 문제가 "?"로 대체되는 경우 이것이 해결 방법입니다.
언급URL : https://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding
'source' 카테고리의 다른 글
Vuex 스토어 모듈 상태에서 'this'에 액세스하는 방법 (0) | 2022.11.15 |
---|---|
Mockito는 인수를 고려하지 않고 메서드를 스텁할 수 있습니까? (0) | 2022.11.15 |
CodeIgniter의 ActiveRecord를 사용하여 열 값이 NULL이 아닌 행을 선택하려면 어떻게 해야 합니까? (0) | 2022.11.15 |
Python의 자녀 클래스에서 부모 클래스의 메서드를 호출하려면 어떻게 해야 합니까? (0) | 2022.11.15 |
Maven 저장소에서 소스 JAR 가져오기 (0) | 2022.11.15 |