source

cmd.exe에서 사용하는 인코딩/코드 페이지는 무엇입니까?

manycodes 2023. 4. 16. 15:23
반응형

cmd.exe에서 사용하는 인코딩/코드 페이지는 무엇입니까?

★★★★★★를 열면cmd.exeWindows 에 windows windows 、 windows windows windows windows windows windows windows windows?

현재 어떤 인코딩을 사용하고 있는지 어떻게 확인할 수 있습니까?
지역 설정에 따라 달라지거나 환경변수를 확인할 수 있습니까?

특정 인코딩으로 파일을 입력하면 어떻게 됩니까?잘못된 인코딩으로 인해 문자가 깨질 수도 있고, 작동될 수도 있습니다.
하지만 나는 무슨 일이 일어나고 있는지 모르는 한 아무것도 믿지 않는다.★★★★★★★★★★★★★★★★★?

요. 때론 ,, 다, 증, 짜, 짜, 짜, 짜, 짜, 짜, 짜, 짜때로는type다른 프로그램들은 횡설수설로 출력하기도 하고 그렇지 않을 수도 있습니다.

우선 Unicode 문자는 현재 콘솔 글꼴에 문자가 포함되어 있는 경우에만 표시됩니다.따라서 기본 Raster 글꼴 대신 Lucida Console과 같은 TrueType 글꼴을 사용합니다.

그러나 콘솔 글꼴에 표시하려는 문자가 포함되어 있지 않으면 횡설수설하는 대신 물음표가 표시됩니다.횡설수설하게 되면 폰트 설정뿐만 아니라 더 많은 일들이 일어납니다.

이 표준 C I하는 경우 C I/O는 다음과 같습니다.printf프로그램의 출력 인코딩이 콘솔의 출력 인코딩과 일치해야 합니다.그렇지 않으면 횡설수설하게 됩니다. chcp에 현재 코드 페이지를 표시 및 설정합니다. I/O한 모든 은 C-라이브러리 I/O가 하는 코드 것처럼 됩니다.chcp.

프로그램의 출력 인코딩과 콘솔의 출력 인코딩을 일치시키는 방법은 두 가지가 있습니다.

  • 은 콘솔의 수 .chcp또는, 그 인코딩으로 출력하도록 자신을 설정합니다.

  • 또는 은 콘솔의할 수 .chcp또는 프로그램의 기본 출력 인코딩과 일치시킵니다.

단, Win32 API를 사용하는 프로그램에서는 UTF-16LE 문자열을 직접 콘솔에 쓸 수 있습니다.코드 페이지를 설정하지 않고 올바른 출력을 얻을 수 있는 유일한 방법입니다.또한 이 함수를 사용하는 경우에도 문자열이 UTF-16LE 인코딩에 포함되어 있지 않은 경우 Win32 프로그램은 올바른 코드 페이지를 에 전달해야 합니다.또,WriteConsoleW프로그램의 출력이 리다이렉트 되면 동작하지 않기 때문에, 이 경우는 더 많은 조작이 필요합니다.

type는 UTF-16LE Byte Order Mark(BOM; UTF-16LE 바이트 순서 마크)의 각 파일의 시작을 체크하기 때문에, 어느 정도 동작합니다.0xFF 0xFE의 유니코드 WriteConsoleW현재 코드 페이지와 무관합니다. ★★★★★★★★★★★★★★★★★★.typeBOM이 비 ASCUTF-16LE BOM을 사용하는 를 .WriteConsoleW: 콘솔 코드 페이지와 프로그램 출력 인코딩을 서로 일치하도록 설정해야 합니다.


어떻게 하면 알 수 있을까요?

다음은 유니코드 문자가 포함된 테스트 파일입니다.

ASCII     abcde xyz
German    äöü ÄÖÜ ß
Polish    ąęźżńł
Russian   абвгдеж эюя
CJK       你好

이것은 테스트 파일을 여러 유니코드 인코딩으로 출력하는 자바 프로그램입니다. 언어로 사용할 수하는 것은 ASCII 입니다.stdout.

import java.io.*;

public class Foo {

    private static final String BOM = "\ufeff";
    private static final String TEST_STRING
        = "ASCII     abcde xyz\n"
        + "German    äöü ÄÖÜ ß\n"
        + "Polish    ąęźżńł\n"
        + "Russian   абвгдеж эюя\n"
        + "CJK       你好\n";

    public static void main(String[] args)
        throws Exception
    {
        String[] encodings = new String[] {
            "UTF-8", "UTF-16LE", "UTF-16BE", "UTF-32LE", "UTF-32BE" };

        for (String encoding: encodings) {
            System.out.println("== " + encoding);

            for (boolean writeBom: new Boolean[] {false, true}) {
                System.out.println(writeBom ? "= bom" : "= no bom");

                String output = (writeBom ? BOM : "") + TEST_STRING;
                byte[] bytes = output.getBytes(encoding);
                System.out.write(bytes);
                FileOutputStream out = new FileOutputStream("uc-test-"
                    + encoding + (writeBom ? "-bom.txt" : "-nobom.txt"));
                out.write(bytes);
                out.close();
            }
        }
    }
}

기본 코드 페이지 출력은?완전 쓰레기야!

Z:\andrew\projects\sx\1259084>chcp
Active code page: 850

Z:\andrew\projects\sx\1259084>java Foo
== UTF-8
= no bom
ASCII     abcde xyz
German    ├ñ├Â├╝ ├ä├û├£ ├ƒ
Polish    ąęźżńł
Russian   ð░ð▒ð▓ð│ð┤ðÁð ÐìÐÄÐÅ
CJK       õ¢áÕÑ¢
= bom
´╗┐ASCII     abcde xyz
German    ├ñ├Â├╝ ├ä├û├£ ├ƒ
Polish    ąęźżńł
Russian   ð░ð▒ð▓ð│ð┤ðÁð ÐìÐÄÐÅ
CJK       õ¢áÕÑ¢
== UTF-16LE
= no bom
A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h         ♣☺↓☺z☺|☺D☺B☺
 R u s s i a n       0♦1♦2♦3♦4♦5♦6♦  M♦N♦O♦
 C J K               `O}Y
 = bom
 ■A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h         ♣☺↓☺z☺|☺D☺B☺
 R u s s i a n       0♦1♦2♦3♦4♦5♦6♦  M♦N♦O♦
 C J K               `O}Y
 == UTF-16BE
= no bom
 A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h        ☺♣☺↓☺z☺|☺D☺B
 R u s s i a n      ♦0♦1♦2♦3♦4♦5♦6  ♦M♦N♦O
 C J K              O`Y}
= bom
■  A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h        ☺♣☺↓☺z☺|☺D☺B
 R u s s i a n      ♦0♦1♦2♦3♦4♦5♦6  ♦M♦N♦O
 C J K              O`Y}
== UTF-32LE
= no bom
A   S   C   I   I                       a   b   c   d   e       x   y   z
   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                   ♣☺  ↓☺  z☺  |☺  D☺  B☺
   R   u   s   s   i   a   n               0♦  1♦  2♦  3♦  4♦  5♦  6♦      M♦  N
♦  O♦
   C   J   K                               `O  }Y
   = bom
 ■  A   S   C   I   I                       a   b   c   d   e       x   y   z

   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                   ♣☺  ↓☺  z☺  |☺  D☺  B☺
   R   u   s   s   i   a   n               0♦  1♦  2♦  3♦  4♦  5♦  6♦      M♦  N
♦  O♦
   C   J   K                               `O  }Y
   == UTF-32BE
= no bom
   A   S   C   I   I                       a   b   c   d   e       x   y   z
   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                  ☺♣  ☺↓  ☺z  ☺|  ☺D  ☺B
   R   u   s   s   i   a   n              ♦0  ♦1  ♦2  ♦3  ♦4  ♦5  ♦6      ♦M  ♦N
  ♦O
   C   J   K                              O`  Y}
= bom
  ■    A   S   C   I   I                       a   b   c   d   e       x   y   z

   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                  ☺♣  ☺↓  ☺z  ☺|  ☺D  ☺B
   R   u   s   s   i   a   n              ♦0  ♦1  ♦2  ♦3  ♦4  ♦5  ♦6      ♦M  ♦N
  ♦O
   C   J   K                              O`  Y}

만약 가 '나'나 '나'나 '나'나 '나'나 '나'로 하면?type★★★★★★★★★★★★★★★★★?이러한 바이트에는 콘솔에 인쇄된 바이트와 동일한 바이트가 포함되어 있습니다.

Z:\andrew\projects\sx\1259084>type *.txt

uc-test-UTF-16BE-bom.txt


■  A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h        ☺♣☺↓☺z☺|☺D☺B
 R u s s i a n      ♦0♦1♦2♦3♦4♦5♦6  ♦M♦N♦O
 C J K              O`Y}

uc-test-UTF-16BE-nobom.txt


 A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h        ☺♣☺↓☺z☺|☺D☺B
 R u s s i a n      ♦0♦1♦2♦3♦4♦5♦6  ♦M♦N♦O
 C J K              O`Y}

uc-test-UTF-16LE-bom.txt


ASCII     abcde xyz
German    äöü ÄÖÜ ß
Polish    ąęźżńł
Russian   абвгдеж эюя
CJK       你好

uc-test-UTF-16LE-nobom.txt


A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h         ♣☺↓☺z☺|☺D☺B☺
 R u s s i a n       0♦1♦2♦3♦4♦5♦6♦  M♦N♦O♦
 C J K               `O}Y

uc-test-UTF-32BE-bom.txt


  ■    A   S   C   I   I                       a   b   c   d   e       x   y   z

   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                  ☺♣  ☺↓  ☺z  ☺|  ☺D  ☺B
   R   u   s   s   i   a   n              ♦0  ♦1  ♦2  ♦3  ♦4  ♦5  ♦6      ♦M  ♦N
  ♦O
   C   J   K                              O`  Y}

uc-test-UTF-32BE-nobom.txt


   A   S   C   I   I                       a   b   c   d   e       x   y   z
   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                  ☺♣  ☺↓  ☺z  ☺|  ☺D  ☺B
   R   u   s   s   i   a   n              ♦0  ♦1  ♦2  ♦3  ♦4  ♦5  ♦6      ♦M  ♦N
  ♦O
   C   J   K                              O`  Y}

uc-test-UTF-32LE-bom.txt


 A S C I I           a b c d e   x y z
 G e r m a n         ä ö ü   Ä Ö Ü   ß
 P o l i s h         ą ę ź ż ń ł
 R u s s i a n       а б в г д е ж   э ю я
 C J K               你 好

uc-test-UTF-32LE-nobom.txt


A   S   C   I   I                       a   b   c   d   e       x   y   z
   G   e   r   m   a   n                   õ   ÷   ³       ─   Í   ▄       ▀
   P   o   l   i   s   h                   ♣☺  ↓☺  z☺  |☺  D☺  B☺
   R   u   s   s   i   a   n               0♦  1♦  2♦  3♦  4♦  5♦  6♦      M♦  N
♦  O♦
   C   J   K                               `O  }Y

uc-test-UTF-8-bom.txt


´╗┐ASCII     abcde xyz
German    ├ñ├Â├╝ ├ä├û├£ ├ƒ
Polish    ąęźżńł
Russian   ð░ð▒ð▓ð│ð┤ðÁð ÐìÐÄÐÅ
CJK       õ¢áÕÑ¢

uc-test-UTF-8-nobom.txt


ASCII     abcde xyz
German    ├ñ├Â├╝ ├ä├û├£ ├ƒ
Polish    ąęźżńł
Russian   ð░ð▒ð▓ð│ð┤ðÁð ÐìÐÄÐÅ
CJK       õ¢áÕÑ¢

동작하는 은 BOM이 포함된 UTF-16LE 파일뿐입니다.type.

의 것을 type파일을 인쇄하면, 가비지가 됩니다.

Z:\andrew\projects\sx\1259084>copy uc-test-UTF-16LE-bom.txt CON
 ■A S C I I           a b c d e   x y z
 G e r m a n         õ ÷ ³   ─ Í ▄   ▀
 P o l i s h         ♣☺↓☺z☺|☺D☺B☺
 R u s s i a n       0♦1♦2♦3♦4♦5♦6♦  M♦N♦O♦
 C J K               `O}Y
         1 file(s) copied.

볼 때copy CON에서는 Unicode가.Unicode는 Unicode라고 할수.★★★★★★★★★★★★★★★★,type명령어에는 파일 시작 부분에서 UTF-16LE BOM을 검출하여 특별한 Windows API를 사용하여 출력하는 로직이 있습니다.

알 수 요.cmd.exe가 it버 in in로 되어 때type일일: :

여기에 이미지 설명 입력

★★★ type, 이 「」, 「BOM」인지 합니다.0xFEFF : " " , " "0xFF 0xFE- BOM이 little-endian - BOM으로 합니다.type 「」를 합니다.fOutputUnicode 이 에 플래그를 됩니다. 이 플래그는 나중에 체크하여 콜 여부를 결정합니다.WriteConsoleW.

그게typeUnicode "BOM" "UTF-16LE" "BOM" "UTF-16LE" "Unicode" 입니다.다른 모든 파일 및 콘솔 출력을 처리하는 특별한 코드가 없는 프로그램의 경우 파일은 현재 코드 페이지에 따라 해석되며 횡설수설로 표시될 수 있습니다.

하면 수 요.type유니코드

#include <stdio.h>
#define UNICODE
#include <windows.h>

static LPCSTR lpcsTest =
    "ASCII     abcde xyz\n"
    "German    äöü ÄÖÜ ß\n"
    "Polish    ąęźżńł\n"
    "Russian   абвгдеж эюя\n"
    "CJK       你好\n";

int main() {
    int n;
    wchar_t buf[1024];

    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    n = MultiByteToWideChar(CP_UTF8, 0,
            lpcsTest, strlen(lpcsTest),
            buf, sizeof(buf));

    WriteConsole(hConsole, buf, n, &n, NULL);

    return 0;
}

이 프로그램은 기본 코드 페이지를 사용하여 Windows 콘솔에서 Unicode를 인쇄하기 위해 작동합니다.


샘플 Java 프로그램의 경우 코드 페이지를 수동으로 설정함으로써 약간의 정확한 출력을 얻을 수 있습니다.단, 출력은 이상하지만,

Z:\andrew\projects\sx\1259084>chcp 65001
Active code page: 65001

Z:\andrew\projects\sx\1259084>java Foo
== UTF-8
= no bom
ASCII     abcde xyz
German    äöü ÄÖÜ ß
Polish    ąęźżńł
Russian   абвгдеж эюя
CJK       你好
ж эюя
CJK       你好
 你好
好
�
= bom
ASCII     abcde xyz
German    äöü ÄÖÜ ß
Polish    ąęźżńł
Russian   абвгдеж эюя
CJK       你好
еж эюя
CJK       你好
  你好
好
�
== UTF-16LE
= no bom
A S C I I           a b c d e   x y z
…

단, Unicode UTF-8 코드 페이지를 설정하는 C 프로그램:

#include <stdio.h>
#include <windows.h>

int main() {
    int c, n;
    UINT oldCodePage;
    char buf[1024];

    oldCodePage = GetConsoleOutputCP();
    if (!SetConsoleOutputCP(65001)) {
        printf("error\n");
    }

    freopen("uc-test-UTF-8-nobom.txt", "rb", stdin);
    n = fread(buf, sizeof(buf[0]), sizeof(buf), stdin);
    fwrite(buf, sizeof(buf[0]), n, stdout);

    SetConsoleOutputCP(oldCodePage);

    return 0;
}

올바른 출력이 있습니다.

Z:\andrew\projects\sx\1259084>.\test
ASCII     abcde xyz
German    äöü ÄÖÜ ß
Polish    ąęźżńł
Russian   абвгдеж эюя
CJK       你好

이야기의 교훈은?

  • type는, 의 코드 , BOM 를 을 인쇄할 수 .
  • 은 Win32 Unicode를 사용하여 할 수 .WriteConsoleW.
  • 코드 페이지를 설정하고 그에 따라 출력 인코딩을 조정하는 다른 프로그램은 프로그램 시작 시 코드 페이지가 무엇이었든 콘솔에 Unicode를 인쇄할 수 있습니다.
  • 의 모든 에 대해서는, 「 수 없다」를 가지고 .chcp또, 여전히 이상한 출력이 출력될 가능성이 있습니다.

유형

chcp

(Dewfy가 이미 말했듯이) 현재 코드 페이지를 확인합니다.

사용하다

nlsinfo

설치된 모든 코드 페이지를 확인하고 코드 페이지 번호가 무엇을 의미하는지 확인합니다.

「Windows Server 2003」을 하려면 , 2003 인스톨 할가 있습니다 XP 로 합니다.nlsinfo.

두 번째 질문에 답하려면인코딩이 어떻게 작동하는지, Joel Spolsky는 이것에 대한 훌륭한 소개 기사를 썼다.강력추천합니다.

Windows 코드 페이지의 문제, C 프로그램의 휴대성 및 현지화 문제로 인해 오랫동안 좌절해 왔습니다.지금까지의 투고에서는, 문제가 상세하게 기술되어 있기 때문에, 이 점에 대해서는 아무것도 추가하지 않습니다.

요약하자면, 결국 Visual C++ 표준 C 라이브러리 위에 UTF-8 호환 라이브러리 레이어를 작성하게 되었습니다.기본적으로 이 라이브러리는 UTF-8을 내부적으로 사용하여 표준 C 프로그램이 모든 코드 페이지에서 올바르게 작동하도록 보장합니다.

MsvcLibX라는 이름의 이 라이브러리는 https://github.com/JFLarvoire/SysToolsLib에서 오픈 소스로 사용할 수 있습니다.주요 기능:

  • 일반 char[] C 문자열 및 표준 C 라이브러리 API를 사용하여 UTF-8로 인코딩된 C 소스.
  • 모든 코드 페이지에서 main() 루틴 argv[를 포함한 모든 것이 UTF-8로 내부적으로 처리되며 표준 입력 및 출력이 자동으로 올바른 코드 페이지로 변환됩니다.
  • 모든 stdio.h 파일 함수는 260자 이상의 UTF-8 경로 이름을 지원합니다.실제로는 최대 64 KByte입니다.
  • Windows 에서는 Visual C++, MsvcLibX 및 Visual C++ C 라이브러리를 사용하여 동일한 소스를 컴파일 및 링크할 수 있으며 Linux 에서는 gcc 및 Linux 표준 C 라이브러리를 사용하여 #ifdef...를 사용할 필요가 없습니다.#endif 블록.
  • Linux에서는 공통이지만 Visual C++에서는 누락된 포함 파일을 추가합니다.예: unistd.h
  • 디렉토리 I/O, 심볼릭링크 관리 등 누락된 기능을 모두 UTF-8 지원(물론:-)으로 추가합니다.

라이브러리를 빌드하고 자신의 프로그램에서 사용하는 방법 등 GitHub의 MsvcLibX README에 대한 자세한 내용은 다음과 같습니다.

위의 GitHub 저장소의 릴리스 섹션은 이 MsvcLibX 라이브러리를 사용하는 여러 프로그램을 제공하며, 이러한 프로그램들은 그 기능을 보여줄 것입니다.예: PATH에 ASCII가 아닌 이름의 디렉토리가 있는 which.exe 도구를 사용하여 ASCII가 아닌 이름의 프로그램을 검색하고 코드 페이지를 변경합니다.

conv.exe를 사용합니다.이 프로그램은 모든 코드 페이지에서 다른 페이지로 데이터 스트림을 쉽게 변환할 수 있습니다.기본값은 Windows 코드페이지에 입력되어 현재 콘솔코드페이지에 출력됩니다. GUI : 메모장 표시할 수 GUI 어플리케이션(예: "메모장")은 다음과 같은 간단한 합니다.type WINFILE.txt | conv

이 MsvcLibX 라이브러리는 결코 완전하지 않습니다.개선을 위한 공헌을 환영합니다!

명령 CHCP는 현재 코드 페이지를 표시합니다.숫자 8xx는 3자리이며 Windows 12xx와는 다릅니다.따라서 영문만 입력해도 아무런 차이가 없지만 확장 코드 페이지(키릴 문자 등)가 잘못 인쇄됩니다.

%HOMEPATH%\init.cmd라고 합니다.
저는 다음과 같이 쓰고 있습니다.

@ECHO OFF
CHCP 65001 > nul

자바에서는 IBM850 인코딩을 사용하여 파일을 썼습니다.그것으로 문제가 해결되었다.

- . 단답 - 단답 - 단답cmd.exe디폴트로 ANSI 인코딩을 사용합니다.

부인.여기서의 어떠한 제안도 따르는 것은 당신의 책임입니다.

" " " 를 하여 합니다..reg적절한 이름을 가진 파일:

Windows Registry Editor Version 5.00
;; https://stackoverflow.com/a/75788701
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"Autorun"="C:\\Windows\\System32\\chcp.com 1252"

이 바로 이 쪽입니다.CMD-CodePage-1252-Restore.reg 삭제:

Windows Registry Editor Version 5.00
;; https://stackoverflow.com/a/75788701
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Command Processor]
"Autorun"=-

2. 장황한 답변– 모든 질문에 대한 답변 시도

★★★★★★를 열면cmd.exeWindows 에 windows windows 、 windows windows windows windows windows windows windows windows?

로는– " " " "cmd.exe는 코드 페이지 437을 사용합니다.내 생각에 이것은 끔찍한 선택이다.
대신 당신의 언어의 ANSI 코드 페이지를 사용하는 것이 좋습니다.– Microsoft 자체 네이티브 텍스트 에디터의 ANSI 인코딩과 호환됩니다.C:\WINDOWS\System32\notepad.exe
서유럽 언어에서 ANSI는 코드 페이지 1252 또는 Windows-1252(CP-1252)를 의미합니다.
다른 언어 그룹에 대해서는 이 답변 끝에 표를 올렸습니다.

현재 어떤 인코딩을 사용하고 있는지 어떻게 확인할 수 있습니까?

– ★★C:\WINDOWS\System32\chcp.com:

C:\>chcp
Active code page: 1252

1252437제 경우엔, 제가 고의로cmd.exe1252년위의 "짧은" 답변에서 설명한 바와 같습니다.

지역 설정에 따라 달라지거나 환경변수를 확인할 수 있습니까?

- 둘 다 아니에요.이 문맥에서 관련된 것은 언어입니다.다음을 시도했습니다.
WinKey + i > 시간 언어 > 언어 > 우선 언어 > 언어 추가.스웨덴어(스웨덴어)추가하고 Windows 표시 언어에서 스웨덴어를 선택했는지 확인했습니다.
하여 열었습니다.cmd.exe라고 입력합니다.chcp를 누릅니다.반응은Active code page: 437따라서 Windows 표시 언어가 Windows의 언어를 변경하더라도 코드 페이지에는 영향을 주지 않는 것으로 보입니다.cmd.exe사용.

특정 인코딩으로 파일을 입력하면 어떻게 됩니까?

잘못된 인코딩으로 인해 문자가 깨질 수도 있고, 작동될 수도 있습니다.

- - 그렇죠. - 그렇죠. - 그렇죠.를 들어,"" " " " " " " 가 있습니다.Some-ANSI-chars.txt스웨덴어 글자가 들어있다.å ★★★★★★★★★★★★★★★★★」ä코드 페이지1252로 부호화되어 있으며 ANSI로 부호화되어 있습니다.
가 가 type 파일cmd.exe되어 있습니다 , 웨덴덴문 , , , , , 。

C:\stackexchange\stackoverflow\Char-encoding>type Some-ANSI-chars.txt
Sakta men säkert vinner basinkomst mark,
 och det viktigaste just nu är att hålla ihop.

그러나 파일을 복사하여 UTF-8로 변환하면 (ASCII가 아닌) 스웨덴 문자마다 두 개의 문자가 인쇄됩니다.

C:\stackexchange\stackoverflow\Char-encoding>type Some-UTF-8-chars.txt
Sakta men säkert vinner basinkomst mark,
 och det viktigaste just nu är att hålla ihop.

바와 같이 의 문자 「Da'ta' UTF-8' '2'å ★★★★★★★★★★★★★★★★★」ä각각 2바이트를 사용합니다.
type는 "decodes"를 디코딩합니다.å ★★★★★★★★★★★★★★★★★」ä각각 2개의 의미 없는 1바이트 문자를 표시하다Ã¥ ★★★★★★★★★★★★★★★★★」ä이런 은 거의 않기 에 전혀가 되지 않습니다. 왜냐하면 나는 거의type내 텍스트 파일의 내용
중요한 것은 내가 가장 좋아하는 텍스트 에디터가 내 파일을 UTF-8로 디코딩하도록 설정되어 있다는 것이다.

하지만 나는 무슨 일이 일어나고 있는지 모르는 한 아무것도 믿지 않는다.

참 - 잘 알겠습니다. 것을 cmd.exe65001번지

UTF-8 인코딩을 사용하지 않는 이유cmd.exe

MSYS2를 대체 명령줄 유틸리티로 사용하는 것을 검토하다

UTF-8 인코딩된 파일의 텍스트를 올바르게 출력하는 명령줄 도구가 절실히 필요한 경우 기본적으로 텍스트 파일이 UTF-8 인코딩된 것으로 가정하는 Linux 스타일의 MSYS2를 다운로드하여 설치할 것을 권장합니다.

UTF-8 문자는 모두 올바르게 렌더링 되어 있습니다만, 다음의 점에 주의해 주세요.

$ cat Some-UTF-8-chars.txt
Sakta men säkert vinner basinkomst mark,
 och det viktigaste just nu är att hålla ihop.

(ASC 이외)II) 대신 ANSI 문자가 물음표로 출력됩니다.

$ cat Some-ANSI-chars.txt
Sakta men s�kert vinner basinkomst mark,
 och det viktigaste just nu �r att h�lla ihop.

ㅇㅇㅇㅇㅇㅇㅇ,cmd.exeANSI 부호화 파일을 올바르게 출력합니다.
MSYS2 단말기는 UTF-8 부호화 파일을 올바르게 출력합니다.

레퍼런스


1.regfile은 이 답변에서 영감을 얻었습니다.레지스트리에서 같은 것을 수동으로 실행하는 방법을 알고 있다고 생각합니다.
이 이미 Autorun
은 PowerShell에주지 PowerShell을 실행합니다.– PowerShell을 실행합니다.chcp· 「 」를 기대하고 Active code page: 437
코드 는 제 입니다..bat파일도 참조해 주세요.99%의 ASCII를 사용합니다.

2 이 실험을 할 때, 저는 이 실험의 대상이Autorun보다 낮은 값HKLM\SOFTWARE\Microsoft\Command Processor를 참조해 주세요.

3 정확히는 메모장2, 메모장++, Visual Studio Code 등 세 가지 "즐겨찾기" 텍스트 편집기가 있습니다.
이 세 가지 중 Visual Studio 코드는 모든 파일을 UTF-8로 인코딩하도록 설정되어 있으며, 반면 Notepad2와 Notepad++는 UTF-8에 의해 인코딩됩니다.
에디터가 옳다고 생각하는 인코딩을 자동 검출합니다.

4 제 "단답"에 레지스트리 해킹을 채택했다면요

언급URL : https://stackoverflow.com/questions/1259084/what-encoding-code-page-is-cmd-exe-using

반응형