>Java >java지도 시간 >파일 생성 시 인코딩을 지정하는 Java 구현 방법

파일 생성 시 인코딩을 지정하는 Java 구현 방법

WBOY
WBOY앞으로
2022-08-24 09:09:202448검색

이 글은 java에 대한 관련 지식을 제공하며, 파일 생성 시 인코딩을 지정하는 Java의 구현 방법을 주로 소개합니다. 이 글은 모든 사람의 학습이나 작업에 있어 매우 중요한 내용을 샘플 코드를 통해 자세히 소개합니다. 가치를 배우는 것이 모든 사람에게 도움이 되기를 바랍니다.

파일 생성 시 인코딩을 지정하는 Java 구현 방법

추천 학습: "java Video Tutorial"

서문: 최근 Java IO 스트림에 관련된 지식을 배웠고, 파일을 읽고 쓰면서 배운 지식을 연습하고 통합하고 싶었습니다. File 클래스를 사용하여 파일을 생성할 때 문득 파일에 사용되는 인코딩을 어떻게 지정해야 하는가 하는 생각이 들었습니다. 그렇다면 파일의 인코딩을 어떻게 확인해야 할까?

1. 문제 분석

먼저 인터넷에 접속해 답을 찾아보세요.

FileInputStream fis=new FileInputStream(“xxxx.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);

위 코드는 아마도 파일을 작성할 때 작성된 문자가 UTF-8로 인코딩된다는 의미일 것입니다. 파일을 만들 때 인코딩을 지정하고 싶습니다. 다음과 같이

File myfile = new File("test.txt”, “UTF-8”);
if (!myfile.exists()) myfile.createNewFile();

그래서 공식 Java API 8 문서를 확인해 보니 File에서는 문자 인코딩을 지정할 수 있는 생성자를 제공하지 않았습니다.

파일 생성 시 인코딩을 지정하는 Java 구현 방법

동시에 set 또는 get과 같은 문자 인코딩에 액세스하는 다른 방법을 제공하지 않습니다. 이는 문자 인코딩이 파일의 고유한 속성이 아님을 나타냅니다. 파일 생성 시간, 파일 수정 시간, 읽기 가능, 쓰기 가능, 실행 가능 여부 등은 파일 고유의 속성이거나 메타 정보이며 파일의 일부입니다.

파일 생성 시 인코딩을 지정하는 Java 구현 방법

2. 문자 인코딩

우리는 컴퓨터에 저장된 모든 정보가 01의 문자열이며 텍스트도 예외는 아니라는 것을 알고 있습니다.

문자 처리에는 두 가지 프로세스가 포함됩니다. 인코딩 및 디코딩

인코딩: 문자를 01 문자열에 "매핑"
디코딩: 01 문자열을 문자에 "매핑"

다양한 문자 인코딩 GBK, UTF-8은 인코딩과 디코딩이 서로 다른 규칙을 사용하므로

동일한 텍스트 문자열: "China"의 경우 UTF-8 인코딩을 사용하여 저장합니다. 일반적으로 한자(기본 01 문자열의 16진수 형식)를 저장하려면 3바이트를 사용합니다.

파일 생성 시 인코딩을 지정하는 Java 구현 방법

GBK 인코딩을 사용하여 저장하고, 2바이트를 사용하여 한자를 나타냅니다.

파일 생성 시 인코딩을 지정하는 Java 구현 방법

텍스트 편집기에서 텍스트를 작성하고 저장하면 편집기는 설정한 문자 인코딩 유형에 따라 텍스트를 01 문자열로 "매핑"합니다.

설정한 문자 유형은 편집기가 텍스트를 10개의 문자열로 인코딩하기 위한 변환 규칙일 뿐이며 텍스트의 속성이 아닙니다.

편집기가 텍스트 파일을 열 때 표시되는 것은 기본 01 문자열이 아니라 텍스트입니다. 이는 편집기가 01 ​​문자열을 문자로 디코딩하기 위해 특정 텍스트 인코딩을 사용하기 때문입니다. 디코딩할 때 사용된 문자 인코딩이 인코딩과 일관되거나 호환되는 경우 텍스트가 올바르게 표시될 수 있습니다. 디코딩 중에 사용된 문자 인코딩이 인코딩과 일관되지 않거나 호환되지 않으면 문자가 깨집니다.

예를 들어 GBK 인코딩을 사용하는 텍스트 파일이 있는데 내용은 "언제 밝은 달이 나올까요?"입니다.

파일 생성 시 인코딩을 지정하는 Java 구현 방법

파일 생성 시 인코딩을 지정하는 Java 구현 방법

저는 VS 코드(사용하기 매우 쉬운 Microsoft)에서 파일을 연다는 것은 용어로 파일을 디코딩하는 것을 의미합니다. 사용되는 기본 텍스트 인코딩은 UTF-8이며 디코딩도 동일합니다. 그러나 내 텍스트의 맨 아래 레이어는 GBK로 인코딩된 01 문자열(2바이트 및 1자)이므로 UTF-8을 사용하여 01 문자열을 디코딩하면 일관성 없는 인코딩 및 디코딩으로 인해 문자가 깨질 수밖에 없습니다. 이때 해당 GBK 인코딩을 수동으로 선택하는 한 디코딩된 파일은 왜곡되지 않습니다.

깨진 문자는 문자 인코딩이 파일의 고유한 속성이 아니라는 측면에서도 나타납니다.

이 점을 설명하기 위해 너무 많이 이야기했습니다. 문자 인코딩은 파일의 고유 속성이 아니라 디코딩 및 인코딩 시 사용되는 규칙입니다.

왜 문자 인코딩이 파일 속성의 일부로 설정되지 않았는지 궁금하지 않을 수 없습니다.

GBK로 설정하고 설정할 수 있다고 가정하면 운영 체제는 해당 기능을 유지해야 합니다. 파일에 쓸 수 없는 것과 마찬가지로, 프로그램이 파일에 쓰려고 하면 운영 체제는 쓰기를 거부합니다. 그런 다음 바이트가 기록될 때마다 운영 체제가 써야 하는 바이트는 다음과 같습니다. 운영 체제 요구 사항 바이트의 적법성을 확인하려면 많은 성능 오버헤드가 필요하며 일부 특수 바이트는 모호한 GBK 또는 UTF-8을 나타낼 수 있기 때문에 구현이 불가능할 수도 있습니다. 이제 이렇게 하는 이유는 편집자가 파일을 열 때 인코딩 속성을 기반으로 올바른 인코딩을 선택할 수 있도록 하기 위한 것입니까? 그럴 필요는 없습니다. 스마트 편집기는 콘텐츠의 처음 몇 바이트를 기반으로 01 문자열이 사용하는 인코딩을 추론할 수 있습니다. 또한 디코딩에 사용되는 문자 인코딩을 수동으로 설정할 수도 있습니다.

3. 문제 해결

파일 생성 시 파일의 인코딩을 지정할 수 없습니다. 파일에 텍스트를 쓸 때(예: Ctrl + S 기본적으로 쓰기 작업을 수행하는 텍스트 편집기에 저장) 텍스트를 01 문자열의 인코딩 규칙으로 변환하도록 선택할 수 있습니다.

Java 프로그램의 경우 코드는 다음과 같습니다. 이는 기사 시작 부분에 언급된 코드입니다.

FileInputStream fis=new FileInputStream(“xxxx.txt”);
OutputStreamWriter osw=new OutputStreamWriter(fis,“UTF-8”);

추천 학습: "java 비디오 튜토리얼"

위 내용은 파일 생성 시 인코딩을 지정하는 Java 구현 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 jb51.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제