source

기본 Java 문자 인코딩 설정

manycodes 2022. 11. 15. 21:33
반응형

기본 Java 문자 인코딩 설정

JVM(1.5.x)에서 사용하는 기본 문자 인코딩을 프로그래밍 방식으로 올바르게 설정하려면 어떻게 해야 합니까?

라고 읽었습니다-Dfile.encoding=whatever예전엔 오래된 JVM을 좋아했었는데 그런 사치를 누릴 수 없어요.

시도했습니다.

System.setProperty("file.encoding", "UTF-8");

되지만, 인 원인이 아닌 것 .getBytesUTF8은 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-8Java/Tomcat

http://www.jvmhost.com/articles/locale-breaks-unicode-utf-8-java-tomcat

의 올바른 ~/.bashrc파일은 우리에게 효과가 있었다.

Spring Boot file.encodingJVM을 사용하다

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에서는 특수 문자와 기호 및 러시아어 문자가 다음과 같은 질문으로 표시됩니다.

  1. Android Studio ★★★★★★★★★★★★★★★★★★★★★★★:File->Settings...->Editor-> File EncodingsUTF-8로 이동합니다(아래의 글로벌 부호화, 프로젝트 부호화 및 기본값).

  2. 임의의 Java 파일 세트:

    System.setProperty("file.encoding","UTF-8");

  3. 테스트 인쇄 디버깅 로그의 경우:

    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

반응형