태그 보관물: input

input

Windows 명령 행에서 유니 코드 문자를 사용하는 방법은 무엇입니까? 행 도구로 전달할 수 없습니다 .

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

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



답변

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

  • 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에서 수행하는 방법에 대한 참조를 추가했습니다.


답변

시험:

chcp 65001

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


답변

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

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

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

내 배치 파일 :

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

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

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


답변

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


답변

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"


답변

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

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


답변

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