Windows 명령 행에서 유니 코드 문자를 사용하는 방법은 무엇입니까?


316

영어가 아닌 문자 (š)가있는 Team Foundation Server (TFS) 프로젝트가 있습니다. 빌드 관련 몇 가지 스크립트를 작성하려고 할 때 문제가 발생했습니다. š 문자를 명령 행 도구로 전달할 수 없습니다 . 명령 프롬프트 또는 다른 메시지가 엉망이되어 tf.exe 유틸리티가 지정된 프로젝트를 찾을 수 없습니다.

나는 .bat 파일 (ANSI, UTF-8 BOM이 있거나 없는 UTF-8)에 대해 다른 형식을 시도했지만 JavaScript (기본적으로 유니 코드 임)로 스크립팅했지만 운이 없습니다. 프로그램을 실행하고 유니 코드 명령 줄을 어떻게 전달 합니까?


1
@JohannesDewender-복사-붙여 넣기가 잘못 되었습니까?
Vilx-

2
파이썬 3.6 "Windows에서 기본 콘솔 해당 버전의 모든 유니 코드 문자를 사용할 수 있습니다"(물론, 나를 위해 그것의 대부분) 하지만 콘솔을 구성해야합니다 cmd를 또는 파이썬 IDLE의 창 상단에 마우스 오른쪽 버튼으로 클릭 ( ), 기본 / 글꼴에서 "Lucida console"을 선택하십시오.
JinSnow



2
@ LưuVĩnhPhúc-아니요, 콘솔에 텍스트를 표시하는 대신 유니 코드 명령 줄 인수를 전달하는 것입니다. 콘솔이 전혀 관여하지 않을 수 있습니다.
Vilx-

답변:


68

내 배경 : 몇 년 동안 콘솔에서 유니 코드 입력 / 출력을 사용합니다 (매일 많이 수행합니다. 또한이 작업을위한 지원 도구를 개발합니다). 다음 사실 / 제한을 이해하는 한 거의 문제가 없습니다.

  • CMD"콘솔"은 관련이없는 요소입니다. CMD.exe콘솔 ( "콘솔 응용 프로그램")을 "내부"로 사용할 수있는 프로그램 중 하나 일뿐입니다.
  • AFAIK CMD는 유니 코드를 완벽하게 지원합니다. 때 / 출력 모든 유니 코드 문자를 입력 할 수 있는 코드 페이지가 활성화됩니다.
  • Windows 콘솔에는 많은 유니 코드 지원 기능이 있지만 완벽하지는 않습니다 ( "충분히"충분합니다 (아래 참조)).
  • chcp 65001매우 위험합니다. 프로그램이 Windows API의 결함을 해결하도록 특별히 설계되지 않은 경우 (또는 이러한 해결 방법이있는 C 런타임 라이브러리를 사용하는 경우) 안정적으로 작동하지 않습니다. Win8은 이러한 문제의 ½을 수정 cp65001하지만 나머지는 여전히 Win10에 적용됩니다 .
  • 나는에서 일 cp1252합니다. 내가 이미 말했듯이 : 콘솔에서 유니 코드를 입력 / 출력하기 위해 코드 페이지를 설정할 필요가 없습니다 .

상세

  • 콘솔에서 유니 코드를 읽거나 쓰려면 응용 프로그램 (또는 해당 C 런타임 라이브러리)이 File-I/OAPI가 아니라 Console-I/OAPI 를 사용할 수있을 정도로 똑똑해야합니다 . (예를 들어, 파이썬이하는 방법을보십시오 .)
  • 마찬가지로 유니 코드 명령 줄 인수를 읽으려면 응용 프로그램 (또는 해당 C 런타임 라이브러리)이 해당 API를 사용할 수있을 정도로 똑똑해야합니다.
  • 콘솔 글꼴 렌더링은 BMP에서 유니 코드 문자 만 지원합니다 (즉, 아래 U+10000). 간단한 텍스트 렌더링 만 지원됩니다 (따라서 사전 구성된 양식을 사용하는 한 유럽어 및 일부 동아시아 언어는 제대로 작동해야 함). [ 동아시아 및 문자 U + 0000, U + 0001, U + 30FB 에는 약간의 작은 글씨가 있습니다.]

실제 고려 사항

  • Window 의 기본값 은별로 도움이되지 않습니다. 최상의 경험을 위해서는 3 가지 구성을 조정해야합니다.

  • 콘솔 응용 프로그램에 "Pasting"을 사용하여 한 번 더 알아볼 수 있습니다 (매우 기술적 인 내용).

    • 16 진수 입력 KeyUpAlt; 캐릭터를 전달하는 다른 모든 방법은 다음과 같습니다 KeyDown. 너무 많은 응용 프로그램에서 문자를 볼 준비가되지 않았습니다 KeyUp. ( Console-I/OAPI를 사용하는 애플리케이션에만 적용 가능 )
    • 결론 : 많은 응용 프로그램이 HEX 입력 이벤트에 반응하지 않습니다.
    • 또한 "Pasted"문자에서 발생하는 작업은 현재 키보드 레이아웃에 따라 달라집니다. 접두사 키를 사용하지 않고 문자를 입력 할 수있는 경우 (그러나처럼 임의의 복잡한 수정 자의 조합으로 Ctrl-Alt-AltGr-Kana-Shift-Gray*) 에뮬레이트 된 키 누르기로 전달됩니다. 이것은 모든 응용 프로그램이 기대하는 것이므로 그러한 문자 만 포함하는 것은 붙여 넣는 것이 좋습니다.
    • 그러나 "다른"문자는 HEX 입력에뮬레이트하여 전달됩니다 .

    결론 : 키보드 레이아웃이 접두사 키가없는 많은 문자 입력을 지원하지 않는 경우 일부 버그가있는 응용 프로그램Paste콘솔의 UI를통해문자를 건너 뛸 수 있습니다Alt-Space E P. ( 이것은 내 키보드 레이아웃을 사용하는 것이 좋습니다 이유입니다!)

또한 Windows 위한 "대체적이며 더 유능한"콘솔 은 콘솔이 아님 을 명심해야합니다 . Console-I/OAPI를 지원하지 않으므로 이러한 API를 사용하여 작동하는 프로그램은 작동하지 않습니다. (하지만 콘솔 파일 핸들에 대한 파일 I / O API 만 사용하는 프로그램은 정상적으로 작동합니다.)

이러한 콘솔 이외의 예는 MicroSoft 's의 일부입니다 Powershell. 나는 그것을 사용하지 않는다; 실험하려면을 눌렀다가 놓은 WinKey다음을 입력하십시오 powershell.


(반면에, ConEmu또는 ANSICON더 많은 것을 시도하는 것과 같은 프로그램 이 있습니다 : 그들은 Console-I/O"진정한 콘솔 응용 프로그램"을 작동시키기 위해 API를 가로 채려고 "시도합니다" . 이것은 실제 장난감 예제 프로그램에서 작동합니다. 특정 문제를 해결하지 못할 수도 있습니다 (실험).

요약

  • 글꼴, 키보드 레이아웃을 설정합니다 (선택적으로 16 진수 입력 허용).

  • Console-I/OAPI를 통과 하고 유니 코드 명령 줄 인수를 허용 하는 프로그램 만 사용하십시오 . 예를 들어, cygwin컴파일 된 프로그램은 괜찮습니다. 내가 이미 말했듯 CMD이 괜찮습니다.

UPD : 처음에는의 버그로 cp65001커널과 CRTL 레이어를 혼합했습니다 ( UPD² : 및 Windows 사용자 모드 API!). 또한 : Win8은이 버그의 절반을 수정합니다. “더 나은 콘솔”응용 프로그램에 대한 섹션을 명확하게 설명하고 Python에서 수행하는 방법에 대한 참조를 추가했습니다.


좋아, 철저한 것을 위해 , 당신은 받아 들여질만한 대답이 될 만하다! 대박!
Vilx-

5
나는 C ++의 초보자이며 신중하게 읽은 후에이 대답을 이해할 수 없습니다. 누군가 이것에 대해 도움을 주거나 더 쉽게 설명 할 수 있습니까?
Rick

@Bachi Bachi 덕분에 키보드 레이아웃의 v73 (위에서 언급 한)에 일부 지원 파일이 없다는 것을 알았습니다. 이제 수정되었습니다! (내으로 판단 .log파일, 그것은에서 간헐적 버그는 zip -ru아니오를 디버깅하는 방법을 단서가 없다 [?!] -. 미래의 또는 피하고 ...)
일리아 Zakharevich

@ 릭 : 맞아! 파이썬에서 대안에 대한 링크를 추가했습니다 (그러나 패치에 대한 직접 링크를 찾을 수는 없습니다 ...).
Ilya Zakharevich

@IlyaZakharevich : D 감사합니다. 그러나 어떻게 든 Windows에서 유니 코드 사용을 포기합니다. 나는 나중에 리눅스를 사용할 것이다.
Rick

387

시험:

chcp 65001

코드 페이지가 UTF-8로 변경됩니다. 또한 Lucida 콘솔 글꼴을 사용해야합니다.


18
이것을 기본값으로 만드는 방법이 있는지 알고 있습니까?
AnnanFay

82
Windows의 코드 페이지 65001 지원에는 C 표준 라이브러리 IO 메서드에 의존하는 많은 응용 프로그램을 손상시키는 심각한 구현 버그가 있으므로 매우 취약합니다. (배치 파일도 65001에서 작동을 멈 춥니 다.) 불행하게도 UTF-8은 Windows의 2 급 시민입니다.
bobince

7
@bobince Windows 코드 페이지 65001 지원에 버그의 예가 있습니까? 나는 하나에 결코 타지 않았기 때문에 호기심이 많으며 인터넷 검색은 아무것도 켜지지 않았습니다. (... 배치 파일은 물론, 정지 작업을 수행하지만, UTF-8은 거의 이등 시민 없음)
로마 Starkov

17
@romkyns : 바이트 수 (예 : fread / fwrite / etc)를 반환하는 호출은 실제로 문자 수를 반환한다는 것을 이해합니다. 불완전한 입력 읽기, 플러시 중단, 배치 파일 손상 등과 같은 다양한 증상이 발생합니다. 일부 배경. CJK "멀티 바이트"로케일에 사용되는 기본 코드 페이지에는이 문제를 해결하기위한 특수 처리 기능이 내장되어 있지만 65001은 지원 하지 않습니다 .
bobince

7
여기서 흥미로운 질문은-바이트를보고하고 대신 문자를보고해야하기 때문에 버그입니까, 또는 그것을 사용하는 응용 프로그램이 바이트 = 문자를 잘못 가정했기 때문입니까? 즉, API 실패 또는 API 사용 실패입니까?
기본

36

나는 같은 문제가 있었다 (체코 출신이다). 영어로 된 Windows 설치가 있으며 공유 드라이브의 파일로 작업해야합니다. 파일 경로에는 체코 어 문자가 포함됩니다.

나에게 맞는 솔루션은 다음과 같습니다.

배치 파일에서 문자 세트 페이지를 변경하십시오.

내 배치 파일 :

chcp 1250
copy "O:\VEŘEJNÉ\ŽŽŽŽŽŽ\Ž.xls" c:\temp

배치 파일은 CP 1250에 저장해야합니다.

콘솔은 문자를 올바르게 표시하지 않지만 이해합니다.


1
건배! 배치 파일 내에 저작권 문자를 입력 할 수 있도록 이것을 필요로했습니다.
Lea Hayes

이것은 당신과 거의 동일한 상황에서 나에게 완벽하게 작동했습니다. 아일랜드어 게 일어 문자, 즉 대신 내 경로 포함 á, é, í, ó,와 ú.
Seany84

@vanna 내 "네트워크 문제에 경로에 터키어 문자 및 공백"을 해결합니다. 당신은 위대합니다.
caglaror


2
문자를 올바르게 표시하기 위해 다른 글꼴을 사용해야했을 수도 있습니다. Lucida Console 이 나를 위해 일했습니다.
Vlastimil Ovčáčík

29

비 유니 코드 프로그램의 언어를 확인하십시오. Windows 콘솔에서 러시아어에 문제가 있으면 여기에서 러시아어를 설정해야합니다.

비 유니 코드 프로그램의 언어 변경


6
유니 코드를 지원하지 않으며 cmd기본 코드 페이지 만 cp866여전히 8 비트 문자 세트로 전환합니다. 심지어 자체 문제를 일으키는 cp866대신 사용 합니다 cp1251.
ivan_pozdeev

1
최신 Windows 10 버전의 새로운 옵션에 대해서는 아래 답변도 참조하십시오.
zvi

14

Windows 콘솔의 기본 코드 페이지를 변경하는 것은 매우 어렵습니다. 웹을 검색 할 때 다른 제안을 찾을 수 있지만 일부 제안은 Windows를 완전히 손상시킬 수 있습니다. 즉, PC가 더 이상 부팅되지 않습니다.

가장 안전한 솔루션은 다음과 같습니다. 레지스트리 키로 이동하여 HKEY_CURRENT_USER\Software\Microsoft\Command ProcessorString value Autorun=를 추가하십시오 chcp 65001.

또는 가장 일반적인 코드 페이지에이 작은 배치 스크립트를 사용할 수 있습니다.

@ECHO off

SET ROOT_KEY="HKEY_CURRENT_USER"


FOR /f "skip=2 tokens=3" %%i in ('reg query HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\CodePage /v OEMCP') do set OEMCP=%%i

ECHO System default values:

ECHO.
ECHO ...............................................
ECHO Select Codepage 
ECHO ...............................................
ECHO.
ECHO 1 - CP1252
ECHO 2 - UTF-8
ECHO 3 - CP850
ECHO 4 - ISO-8859-1
ECHO 5 - ISO-8859-15
ECHO 6 - US-ASCII
ECHO.
ECHO 9 - Reset to System Default (CP%OEMCP%)
ECHO 0 - EXIT
ECHO.


SET /P  CP="Select a Codepage: "

if %CP%==1 (
    echo Set default Codepage to CP1252
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 1252>nul" /f
) else if %CP%==2 (
    echo Set default Codepage to UTF-8
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 65001>nul" /f
) else if %CP%==3 (
    echo Set default Codepage to CP850
    reg add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 850>nul" /f
) else if %CP%==4 (
    echo Set default Codepage to ISO-8859-1
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28591>nul" /f
) else if %CP%==5 (
    echo Set default Codepage to ISO-8859-15
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 28605>nul" /f
) else if %CP%==6 (
    echo Set default Codepage to ASCII
    add "%ROOT_KEY%\Software\Microsoft\Command Processor" /v Autorun /t REG_SZ /d "@chcp 20127>nul" /f
) else if %CP%==9 (
    echo Reset Codepage to System Default
    reg delete "%ROOT_KEY%\Software\Microsoft\Command Processor" /v AutoRun /f
) else if %CP%==0 (
    echo Bye
) else (
    echo Invalid choice
    pause
)

사용 @chcp 65001>nul대신에 chcp 65001억압 출력을 "활성 코드 페이지 : 65001는"당신은 당신이 새로운 명령 행 윈도우를 시작할 때마다 얻을 것입니다.

코드 페이지 식별자 에서 얻을 수있는 모든 사용 가능한 번호의 전체 목록

설정은 현재 사용자에게만 적용됩니다. 모든 사용자에 대해 설정할 싶은 경우에, 라인을 대체 SET ROOT_KEY="HKEY_CURRENT_USER"하여SET ROOT_KEY="HKEY_LOCAL_MACHINE"


좋은 생각과 유용한 예도 있습니다!

13

실제로, 비법은 명령 프롬프트가 영어 이외의 문자를 실제로 이해하고 올바르게 표시 할 수 없다는 것입니다.

영어가 아닌 chracter가 포함 된 명령 프롬프트에 경로를 입력하면 "?? ?????? ?????"로 표시됩니다. 명령을 제출하면 (내 경우에는 CD "??? ?????? ?????") 모든 것이 예상대로 작동합니다.


2
이름 충돌이 발생할 수 있으므로 이것은 아마도 약간 위험합니다. 예를 들어, "???"로 렌더링되는 두 파일이 있고 "cd ???"를 입력 한 경우 어느 것을 사용 해야할지 알지 못합니다 (또는 더 나쁜 것은 임의의 것을 선택합니다).
John

26
???를 입력하지 않고 실제 이름을 ???로 입력합니다. 암호 입력 상자로 생각하십시오. 입력 한 내용은 ***로 표시되지만 제출 된 원본은 원본입니다.
사용자

이것은 실제로 명령 프롬프트에서 명령이 직접 실행되도록 작동했습니다. 그러나 .cmd배치 파일 을 실행하면 배치 파일 chcp 65001맨 위에 배치해야합니다.
wisbucky

귀하의 경우에는 글꼴 문제입니다 ... 내용이 있으며 적절한 글꼴이 표시되지 않습니다. 그러나 OP는 다릅니다.
WesternGun

11

Windows 10 x64 컴퓨터에서 다음과 같이 명령 프롬프트에 영어 이외의 문자를 표시했습니다.

관리자 권한 명령 프롬프트를 엽니 다 (CMD.EXE를 관리자 권한으로 실행). 다음을 통해 레지스트리에 사용 가능한 트루 타입 글꼴이 콘솔에 있는지 조회하십시오.

    REG query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont"

다음과 같은 출력이 표시됩니다.

    0    REG_SZ    Lucida Console
    00    REG_SZ    Consolas
    936    REG_SZ    *新宋体
    932    REG_SZ    *MS ゴシック

이제 Courier New와 같이 필요한 문자를 지원하는 트루 타입 글꼴을 추가해야합니다. 문자열 이름에 0을 추가하여이 작업을 수행하므로이 경우 다음 이름은 "000"입니다.

    REG ADD "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont" /v 000 /t REG_SZ /d "Courier New"

이제 UTF-8 지원을 구현합니다.

    REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 65001 /f

기본 글꼴을 "Courier New"로 설정하십시오.

    REG ADD HKCU\Console /v FaceName /t REG_SZ /d "Courier New" /f

글꼴 크기를 20으로 설정하십시오.

    REG ADD HKCU\Console /v FontSize /t REG_DWORD /d 20 /f

원하는 경우 빠른 편집을 활성화하십시오.

    REG ADD HKCU\Console /v QuickEdit /t REG_DWORD /d 1 /f

3
일반적으로 코드 페이지 65001을 사용하면 크리에이터 업데이트가있는 Windows 10에서 버그없이 작동합니다. Windows 7에서는 출력 버그와 입력 버그가 모두 있습니다. Windows 8 및 이전 버전의 Windows 10에서는 입력 버그만 있으므로 입력을 7 비트 ASCII로 제한합니다.
Eryk Sun

6

Python 2.7에 대한 완전한 답변을 보지 못했지만 두 가지 중요한 단계와 매우 유용한 선택적 단계를 간략하게 설명하겠습니다.

  1. 유니 코드를 지원하는 글꼴이 필요합니다. Windows에는 Lucida Console이 제공되며 명령 프롬프트 의 제목 표시 줄마우스 오른쪽 버튼으로 클릭하고 Defaults옵션을 클릭하면 선택할 수 있습니다. 또한 색상에 액세스 할 수 있습니다. Properties대신 선택하여 특정 방식으로 호출 된 명령 창의 설정 (예 : Visual Studio 열기)을 변경할 수도 있습니다 .
  2. 코드 페이지를로 설정해야합니다 cp65001. 이는 Microsoft가 명령 프롬프트에 UTF-7 및 UTF-8 지원을 제공하려는 것으로 보입니다. chcp 65001명령 프롬프트에서 실행 하여이를 수행하십시오 . 설정되면 창을 닫을 때까지이 방식으로 유지됩니다. cmd.exe를 시작할 때마다이를 다시 실행해야합니다.

보다 영구적 인 해결책 은 수퍼 유저에 대한이 답변 을 참조하십시오 . 즉, REG_SZregedit at를 사용하여 (String) 항목을 HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor만들고 이름을 지정하십시오 AutoRun. 값을로 변경하십시오 chcp 65001. 명령에서 출력 메시지를 보지 않으려면 @chcp 65001>nul대신 사용하십시오.

일부 프로그램은이 인코딩과 상호 작용하는 데 문제가 있습니다. MinGW는 중요하지 않은 오류 메시지로 컴파일하는 동안 실패하는 주목할만한 프로그램입니다. 그럼에도 불구하고 이것은 매우 잘 작동하며 대부분의 프로그램에서 버그를 일으키지 않습니다.


5

이 방법은 새 버전의 Windows 10에서 유용한 것으로 나타났습니다.

이 기능을 켜십시오 : "베타 : 전세계 언어 지원을 위해 유니 코드 UTF-8 사용"

제어판-> 국가 별 설정-> 관리 탭-> 시스템 로케일 변경 ...

지역 설정


powershell 또는 cmd를 사용하여이를 달성하는 방법은 무엇입니까?
Corey

콘솔에 중국어 문자를 표시하려고하는데 Windows 10 64 비트에서 작동하지 않습니다 (터키어로 설치하고 나중에 영어로 변경). 다음으로 중국어를 설치하고 작동하는지 확인해 보겠습니다.
akinuri

4

정말 간단한 옵션 중 하나는 MinGW 와 같은 Windows bash 셸을 설치 하고 다음을 사용하는 것입니다.

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

유닉스 커맨드 라인 기능을 사용해야하기 때문에 약간의 학습 곡선이 있지만 그 기능을 좋아하고 콘솔 문자 세트를 UTF-8로 설정할 수 있습니다.

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

물론 grep, find, less 등과 같은 일반적인 * nix 제품을 모두 얻을 수 있습니다.


이 (오래된) 경우에 문제는 콘솔이 아닌 스크립트에있었습니다. bash 스크립트를 사용하면 문제가 해결됩니까?
Vilx-

예, 실제로 나무 배쉬 스크립트는 UTF-8로 플래그 될 수 있으며 Windows 배치 파일보다 훨씬 많은 전력으로 작동 할 수 있습니다. 유니 코드에서 훨씬 나아질 수 있습니다.
Steve Barnes


UTF-8로 인코딩 된 문자를 출력하는 것이 좋습니다. 그러나 입력은 여전히 ​​시스템 코드 페이지에 의해 인코딩됩니다.
Rick

1
Git을 사용하는 경우 Windows 사용자가 이미 bash 쉘을 가지고 있다고 추가하려면 Git> Git Bash 창을여십시오.
skomisa

3

비슷한 문제 (내 문제는 명령 프롬프트에서 MySQL의 UTF-8 문자를 표시하는 것이 었습니다),

나는 이것을 다음과 같이 해결했다.

  1. 명령 프롬프트의 글꼴을 Lucida Console로 변경했습니다. (이 단계는 상황과 관련이 없어야합니다. 실제 캐릭터가 아니라 화면에 표시된 것과 만 관련이 있습니다).

  2. 코드 페이지를 Windows-1253으로 변경했습니다. "chcp 1253"명령 프롬프트에서이 작업을 수행합니다. UTF-8을보고 싶었던 경우에 효과적이었습니다.


7
Windws-1253은 유니 코드 코드 페이지가 아닙니다. 표준 256 자 코드 페이지입니다. 분명히 해당 코드 페이지에 표시 할 수있는 문자 만 사용했지만 보편적이지는 않습니다.
Vilx-

3

이 문제는 상당히 성가신 일입니다. 파일 이름과 파일 내용에 보통 한자가 있습니다. Windows 10을 사용하고 있습니다. 여기 내 솔루션이 있습니다.

디스플레이에 파일 이름 과 같은, dir또는 ls당신이 우분투는 윈도우 10에 비난 설치 한 경우

  1. UTF8 이외의 문자를 지원하도록 영역을 설정하십시오.

  2. 그런 다음 콘솔의 글꼴이 해당 로캘의 글꼴로 변경되고 콘솔의 인코딩도 변경됩니다.

이전 단계를 수행 한 후 명령 행 도구를 사용하여 UTF-8 파일 의 파일 컨텐츠 를 표시하려면

  1. 다음으로 페이지를 utf-8로 변경하십시오. chcp 65001
  2. Lucida Console과 같이 utf-8을 지원하는 글꼴로 변경
  3. type명령을 사용 하여 파일 내용을 들여다 보거나 catWindows 10에 Ubuntu bash를 설치 한 경우
  4. 콘솔 인코딩을 utf-8로 설정 한 후 중국어 입력 방법을 사용하여 cmd에 중국어 문자를 입력 할 수 없습니다.

가장 게으른 해결책 : http://cmder.net/ 과 같은 콘솔 에뮬레이터를 사용 하십시오.


이것은 나를 위해하지 않았다. point명령 출력의 한자 는 여전히 깨져 있습니다.
Sthinging Yu

@SiqingYu 나는 미친 설정을 포기합니다. 그냥 blog.miniasp.com/post/2015/09/27/Useful-tool-Cmder.aspx를
code4j

이전에는 Cmder를 사용했지만 Visual Studio에서 사용하는 개발자 콘솔을 대체 할 수는 없습니다.
Sthinging Yu

@SiqingYu C # 대화 형 파워 쉘을 의미합니까?
code4j

대화 형 전원 셸이 아니라 Visual C ++에서도 사용되는 개발자 콘솔입니다. Win32 콘솔 응용 프로그램 프로젝트의 기본 디버그 콘솔입니다.
Sthinging Yu

2

여기에 몇 가지 답변이 있지만 질문을 다루지 않는 것 같습니다. 사용자는 명령 줄에서 유니 코드 입력을 원합니다.

Windows는 2 바이트 문자열로 인코딩하기 위해 UTF-16을 사용하므로 프로그램의 OS에서이를 가져와야합니다. 이를 수행하는 두 가지 방법이 있습니다.

1) Microsoft는 main이 넓은 문자 배열을 취할 수 있도록하는 확장 기능을 가지고 있습니다 : int wmain (int argc, wchar_t * argv []); https://msdn.microsoft.com/en-us/library/6wd819wh.aspx

2) Windows API를 호출하여 명령 행의 유니 코드 버전을 얻으십시오. wchar_t win_argv = (wchar_t ) CommandLineToArgvW (GetCommandLineW (), & nargs); https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/nf-shellapi-commandlinetoargvw

이 읽기 : http://utf8everywhere.org을 자세한 정보를 원하시면, 다른 운영 체제를 지원하는 경우 특히.


아, 아니요, 죄송 합니다만 질문을 놓쳤습니다. 이것은 유니 코드 문자를 수신 할 프로그램을 작성할 때 입니다. 내 질문은 유니 코드 문자를 다른 프로그램으로 보내는 것에 관한 것이 었 습니다.
Vilx-

2

2019 년 6 월부터 Windows 10을 사용하면 코드 페이지를 변경할 필요가 없습니다.

"를 참조 소개 Windows 터미널 (에서" 카일 계피 )과 마이크로 소프트 / 터미널 .
Consolas 글꼴을 사용하면 부분 유니 코드 지원이 제공됩니다.

Microsoft/Terminal387 호에 설명 된대로 :

현재 유니 코드에는 87,887 개의 표의 문자가 있습니다. 그들 모두도 필요합니까?
경계가 필요하고 그 경계를 넘어서는 문자는 폰트 폴백 / 폰트 링크 / 무엇이든 처리해야합니다.

Consolas가 다루어야 할 사항 :

  • CLI의 최신 OSS 프로그램에서 사용되는 기호로 사용 된 문자
  • 이러한 문자는 Consolas의 디자인 및 메트릭을 따라야하며 기존 Consolas 문자와 올바르게 정렬되어야합니다.

Consola가 다루지 않아야 할 사항 :

  • 라틴어, 그리스어 및 키릴 자모를 넘어서는 문자와 문장 부호, 특히 문자는 복잡한 형태 (예 : 아랍어)가 필요합니다.
  • 이러한 문자는 글꼴 대체로 처리해야합니다.

1

컴퓨터가 DOS 창에 경로 / 파일 이름을 입력 할 때 올바른 경로 / 파일 이름을 표시하는 경우 .bat 파일에 대한 빠른 결정 :

  1. con temp.txt 복사 [Enter를 누르십시오]
  2. 경로 / 파일 이름을 입력하십시오 [Enter를 누르십시오]
  3. 보도 Ctrl 키-Z [Enter 키를 누릅니다]

이렇게하면 .txt 파일-temp.txt를 만들 수 있습니다. 메모장에서 열고 텍스트를 읽을 수 있습니다 (읽을 수없는 것으로 걱정하지 마십시오)하고 .bat 파일에 붙여 넣습니다. .bat를 실행하면 DOS 창에서 이런 방식으로 만들어졌습니다 (Cyrillic, Bulgarian).


1

더 좋은 방법 : 사용 가능한 무료 Microsoft 일본어 팩을 설치하십시오. (다른 동양 언어 팩도 작동하지만 일본어를 테스트했습니다.)

이것은 큰 글리프 세트가있는 글꼴을 제공하고 기본 동작으로 만들고 cmd, 워드 패드 등과 같은 다양한 Windows 도구를 변경합니다.


1

코드 페이지를 1252로 변경하면 효과가 있습니다. 나에게 문제는 이중 인형 § 기호가 Windows Server 2008의 DOS에 의해 다른 기호로 변환된다는 것입니다.

나는 나의 BCP 선언문에서 CHCP 1252와 캡을 사용했다.


고마워요! 사람들이 왜이 투표에 투표했는지 모르겠습니다. 일부 사람들에게는이 대안이 올바른 대안입니다.이 코드 페이지 1252는 Windows Server 2012에서도 CP 65001과 동일한 코드가 작동하지 않는 문제를 해결합니다. 배치 스크립트가 편집 된 코드 페이지 또는 OS 기본값에 달려 있다고 가정합니다. 이 경우 en-US 기본 OS가있는 독일 MUI 시스템에서 메모장을 사용하여 작성되었습니다.
Tony Wall

0

배치 파일에서 짧은 (8 도트 3) 이름으로 파일을 참조하여 유니 코드 이름이 지정된 파일을 삭제하는 비슷한 문제가 발생했습니다.

간단한 이름은을 통해 볼 수 있습니다 dir /x. 분명히 이것은 이미 알려진 유니 코드 파일 이름에서만 작동합니다.

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