cmd.exe는 어떤 인코딩 / 코드 페이지를 사용하고 있습니까?


271

Windows에서 cmd.exe를 열면 어떤 인코딩을 사용합니까?

현재 사용중인 인코딩을 어떻게 확인할 수 있습니까? 지역 설정에 따라 다르거 나 확인할 환경 변수가 있습니까?

특정 인코딩으로 파일을 입력하면 어떻게됩니까? 때로는 잘못된 문자 (잘못된 인코딩이 사용됨)가 생기고 때로는 작동합니다. 그러나 나는 무슨 일이 일어나고 있는지 모른다면 아무것도 믿지 않습니다. 누구든지 설명 할 수 있습니까?

답변:


389

그렇습니다. 때로는 실망 스럽습니다. 때로는 type다른 프로그램이 횡설수설을하지만 때로는 그렇지 않습니다.

우선, 유니 코드 문자는 현재 콘솔 글꼴에 문자가 포함 된 경우 에만 표시 됩니다 . 따라서 기본 래스터 글꼴 대신 Lucida Console과 같은 트루 타입 글꼴을 사용하십시오.

그러나 콘솔 글꼴에 표시하려는 문자가 포함되어 있지 않으면 횡설수설 문자 대신 물음표가 표시됩니다. 횡설수설하면 글꼴 설정보다 더 많은 일이 진행됩니다.

프로그램이 같은 표준 C 라이브러리 I / O 기능을 사용하는 경우 printf, 프로그램의 출력 인코딩은 콘솔의 출력 인코딩과 일치해야 하거나 횡설수설을 얻을 것이다. chcp현재 코드 페이지를 표시하고 설정합니다. 표준 C 라이브러리 I / O 함수를 사용하는 모든 출력은로 표시된 코드 페이지에있는 것처럼 처리됩니다 chcp.

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

  • 프로그램은 사용하여 콘솔의 현재 코드 페이지를 얻을 수있다 chcp거나 GetConsoleOutputCP, 그 인코딩으로 출력 자체를 구성하거나

  • 사용자 또는 프로그램은 사용하여 콘솔의 현재 코드 페이지를 설정할 수 있습니다 chcp또는 SetConsoleOutputCP프로그램의 기본 출력 인코딩과 일치 할 수 있습니다.

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

typeUTF-16LE BOM (Byte Order Mark) , 즉 bytes 에 대해 각 파일의 시작을 검사하기 때문에 어느 정도 시간이 걸립니다 0xFF 0xFE. 그러한 마크를 찾으면 WriteConsoleW 현재 코드 페이지에 관계없이 파일에 유니 코드 문자를 표시합니다 . 그러나 typeUTF-16LE BOM이없는 파일을 호출하거나 호출하지 않는 명령에 비 ASCII 문자를 사용하는 WriteConsoleW경우 콘솔 코드 페이지와 프로그램 출력 인코딩을 서로 일치하도록 설정해야합니다.


우리는 이것을 어떻게 알 수 있습니까?

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

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

다음은 테스트 파일을 다양한 유니 코드 인코딩으로 인쇄하는 Java 프로그램입니다. 모든 프로그래밍 언어 일 수 있습니다. 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       õ¢áÕÑ¢

작동 하는 유일한 것은 UTF-16LE 파일이며 BOM을 통해를 통해 콘솔에 인쇄됩니다 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유니 코드를 올바르게 표시하지 않는다는 사실 에서 type명령 시작시 파일 시작시 UTF-16LE BOM을 감지하고 특수한 Windows API를 사용하여 인쇄하는 논리가 있다고 결론 내릴 수 있습니다 .

우리는 파일 cmd.exetype나갈 때 디버거 를 열어서 이것을 볼 수 있습니다 .

여기에 이미지 설명을 입력하십시오

type파일을 연 후에 는 BOM ( 0xFEFF0xFF 0xFE리틀 엔디안 의 바이트) 을 확인하고 이러한 BOM이 type있으면 내부 fOutputUnicode플래그를 설정합니다 . 이 플래그는 나중에 호출 여부를 결정하기 위해 점검됩니다 WriteConsoleW.

그러나 이것이 typeBOM이 있고 UTF-16LE 인 파일에 대해서만 유니 코드를 출력 하는 유일한 방법 입니다. 다른 모든 파일 및 콘솔 출력을 처리하기위한 특수 코드가없는 프로그램의 경우 파일은 현재 코드 페이지에 따라 해석되며 횡설수설로 표시 될 수 있습니다.

다음 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 콘솔에서 유니 코드를 인쇄하는 데 사용됩니다.


샘플 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
…

그러나 유니 코드 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으로 UTF-16LE 파일을 인쇄 할 수 있습니다
  • Win32 프로그램을 사용하여 유니 코드를 콘솔에 출력하도록 프로그래밍 할 수 있습니다 WriteConsoleW.
  • 코드 페이지를 설정하고 그에 따라 출력 인코딩을 조정하는 다른 프로그램은 프로그램 시작 당시의 코드 페이지에 관계없이 콘솔에서 유니 코드를 인쇄 할 수 있습니다.
  • 다른 모든 것에 대해서는와 엉망이되어야 chcp하며 아마도 이상한 출력을 얻습니다.

73
우와, 이것은 내가 본 것 중 가장 상세한 답변이어야합니다. dissasembly 인쇄 및 다국어 기술에 대한 추가 크레딧! 정말 아름답습니다!
공습

2
VS2008에 도입 된 Microsoft 특정 확장 _setmode (_fileno (stdout), _O_U16TEXT)를 연구 할 수도 있습니다. stackoverflow.com/a/9051543stackoverflow.com/a/12015918msdn.microsoft.com/en-us/library/tw4k6df8(v=vs.90).aspx를 참조하십시오. _setmode ()와 SetConsoleOutputCP (), 두 가지 접근 방식에는 전혀 알 수없는 다른 미묘함과 부작용이있을 수 있습니다. andrewdotn이 _setmode (fd, _O_U16TEXT)에 대한 관찰로 자신의 답변을 업데이트 할 수 있다면 좋을 것입니다.
JasDev

13
이것은 훌륭한 답변이지만 콘솔이 UTF-16을 지원한다고 오도합니다. UCS-2로 제한됩니다. 즉 기본 다국어 평면 (BMP)의 문자로 제한됩니다. Win32 콘솔 서버 (현재는 conhost.exe)가 1990 년경에 설계되었을 때 유니 코드는 16 비트 표준이므로 콘솔 화면 버퍼는 문자 셀당 하나의 16 비트 WCHAR을 사용합니다. UTF-16 서로 게이트 쌍은 두 개의 상자 문자로 인쇄됩니다.
Eryk Sun

3
@ user200783에서는 분해 된 형식이 지원되지 않습니다. 일반적으로 NFC와 동등한 것으로 변환 할 수 있습니다. 또한 서양 로케일의 콘솔에서는 전각 및 반각 글리프를 혼합 할 수 없습니다. 또한 코드 페이지 65001 (UTF-8)을 사용하는 경우 Windows 8 이전 WriteFile에는 바이트 수 대신 쓴 문자 수를보고하므로 버퍼링 된 작성자는 비 ASCII 문자 수에 비례하여 '남은'바이트를 여러 번 재 시도합니다. . 또한 65001에서을 호출 할 때 UTF-16 코드 당 1 ANSI 바이트를 가정하기 때문에 비 호스트 문자를 읽지 않으면 conhost.exe에서 실패합니다 WideCharToMultiByte.
Eryk Sun

2
이 답변의 간단한 데모 프로그램은 GetStdHandle(STD_OUTPUT_HANDLE)C stdout가 콘솔 핸들 이라고 가정 합니다. 실제로 콘솔을 테스트하려면 GetConsoleMode성공했는지 확인하십시오 . 또한 _isatty낮은 I / O 파일 디스크립터가 콘솔인지 확인 하기 위해 C 런타임 함수를 사용하지 마십시오 . 그것은 문자 모드 장치를 검사 NUL합니다. 대신 _get_osfhandle핸들을 직접 호출 하여 확인하십시오.
Eryk Sun

29

유형

chcp

Dewfy가 이미 말한 것처럼 현재 코드 페이지를 볼 수 있습니다.

사용하다

nlsinfo

설치된 모든 코드 페이지를보고 코드 페이지 번호의 의미를 확인하십시오.

를 사용하려면 Windows Server 2003 Resource Kit가 설치되어 있어야합니다 (Windows XP에서 작동) nlsinfo.


19
흥미롭게도 nlsinfo내 Windows 7에는 존재하지 않는 것 같습니다.
Joey

2
nlsinfoWindows XP SP3 컴퓨터에도 없습니다.
Thomas Owens

2
아 죄송합니다 Windows Server Resource Kit 도구와 함께 제공되는 것 같습니다. 이전에 Windows XP SP3 컴퓨터에서 두 번 사용했지만 기본적으로 설치되지 않았다는 것을 몰랐습니다.
Cagdas Altinkaya

아, 비스타 컴퓨터에 설치 한 이유를 설명합니다.
Joey

4
nlsinfoWindows 10E 컴퓨터에는 존재하지 않습니다.
Yousha Aleayoub

21

두 번째 질문에 다시 답하십시오. Joel Spolsky는 인코딩이 어떻게 작동하는지에 대해 훌륭한 입문 기사를 썼습니다 . 권장.


13
나는 그것을 읽고 그것을 알고있다. 그러나 Windows에서는 OS와 대부분의 응용 프로그램이 인코딩에 대해 전혀 무지한 것처럼 보이기 때문에 항상 상실감을 느낍니다.
danglund

5

CHCP 명령은 현재 코드 페이지를 보여줍니다. 8xx의 세 자리 숫자가 있으며 Windows 12xx와 다릅니다. 따라서 영어 전용 텍스트를 입력해도 아무런 차이가 없지만 키릴 자모와 같은 확장 코드 페이지가 잘못 인쇄됩니다.


5
CHCP는 3 자리 만 표시하지 않으며 8 ## 형식도 아닙니다. 437은 예를 들어 미국 인코딩이며 영어 시스템에서는 사실상 표준입니다. -65001은 유니 코드 인코딩입니다 (제대로 기억하면 UTF-8이고 65000은 UTF-7입니다). 또한 CMD는 예를 들어 1250 코드 페이지로 전환 할 수 있지만 이러한 코드 페이지를 언제 선택할 수 있는지 알 수 없습니다. (Win7하에 있습니다.)
Adam LS

4

Windows 코드 페이지 문제와 C 프로그램 이식성 및 현지화 문제로 오랫동안 좌절했습니다. 이전 게시물에는 문제가 자세히 설명되어 있으므로이 점에서 아무것도 추가하지 않겠습니다.

간단히 말해서 결국 Visual C ++ 표준 C 라이브러리를 통해 자체 UTF-8 호환성 라이브러리 계층을 작성했습니다. 기본적으로이 라이브러리는 표준 C 프로그램이 UTF-8을 내부적으로 사용하여 모든 코드 페이지에서 올바르게 작동하도록합니다.

MsvcLibX라고하는이 라이브러리는 https://github.com/JFLarvoire/SysToolsLib 에서 오픈 소스로 제공됩니다 . 주요 특징:

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

라이브러리를 빌드하고 자신의 프로그램에서 사용하는 방법을 포함하여 GitHubMsvcLibX README에 대한 자세한 내용 .

방출 섹션위 GitHub 리포지토리 은이 MsvcLibX 라이브러리를 사용하는 여러 프로그램을 제공하며이 기능은 해당 기능을 보여줍니다. 예 : PATH에 ASCII가 아닌 이름을 가진 디렉토리를 가진 which.exe 도구를 사용하고, ASCII가 아닌 이름을 가진 프로그램을 검색하고 코드 페이지를 변경하십시오.

또 다른 유용한 도구로는 conv.exe 프로그램이 있습니다. 이 프로그램은 모든 코드 페이지에서 다른 스트림으로 데이터 스트림을 쉽게 변환 할 수 있습니다. 기본값은 Windows 코드 페이지에 입력되고 현재 콘솔 코드 페이지에 출력됩니다. 이를 통해 다음과 같은 간단한 명령을 사용하여 명령 콘솔에서 Windows GUI 앱 (예 : 메모장)으로 생성 된 데이터를 올바르게 볼 수 있습니다.type WINFILE.txt | conv

이 MsvcLibX 라이브러리는 결코 완전한 것은 아니며,이를 개선하기위한 기여도 환영합니다!


2

Java에서는 파일을 작성하기 위해 "IBM850"인코딩을 사용했습니다. 문제가 해결되었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.