문제

Console.WriteLine을 사용하여 일부 텍스트를 출력하는 작은 C# 콘솔 프로그램이 있습니다. 그런 다음이 출력을 다음과 같은 텍스트 파일로 파이프합니다.

c:myprogram > textfile.txt

그러나 파일은 /u 스위치로 CMD를 시작하더라도 항상 ANSI 텍스트 파일입니다. CMD /? /u 스위치에 대해 말합니다.

/u는 파이프 또는 파일에 내부 명령의 출력이 유니 코드가됩니다.

그리고 그것은 내가 할 때 실제로 차이를 만듭니다.

c:echo "foo" > text.txt

text.txt는 유니 코드입니다 (bom없이)

내 콘솔 프로그램의 출력을 새 파일로 배관하는 이유가 유니 코드 파일과 마찬가지로 유니 코드 파일을 생성하지 않으며 어떻게 변경할 수 있습니까?

나는 단지 BOM이 올바른 유니 코드 파일을 생성하는 Windows Power Shell을 사용하지만 CMD로 수행하는 방법을 알고 싶습니다.

감사!

도움이 되었습니까?

해결책

문서에서 말했듯이 /u 스위치는 내부 명령은 유니 코드 출력을 생성합니다. 귀하의 프로그램은 CMD.exe의 내부 명령 중 하나가 아니므로 /u 옵션이 영향을 미치지 않습니다.

유니 코드 텍스트 파일을 만들려면 프로그램이 유니 코드 텍스트를 생성하고 있는지 확인해야합니다.

그래도 충분하지 않을 수도 있습니다. 나는 만났다 Junfeng Zhang 의이 블로그 콘솔 프로그램에서 유니 코드 텍스트를 작성하는 방법을 설명합니다. 표준 출력 핸들의 파일 유형을 확인합니다. 문자 파일 (콘솔 또는 LPT 포트)의 경우 writeFileW를 호출합니다. 다른 모든 유형의 핸들 (디스크 파일 및 파이프 포함)의 경우 출력 문자열을 콘솔의 현재 코드 페이지로 변환합니다. 그래도 그것이 .NET 용어로 어떻게 변환되는지 모르겠습니다.

다른 팁

Mscorlib가 Console.WriteLine을 구현하는 방법을 살펴 보았으며, 호출을 기반으로 사용할 텍스트 출력 인코딩을 결정하는 것 같습니다. getConsoleOutputCP. 따라서 코드가 반환 된 코드가 CMD 콘솔과는 다른 코드 콘솔의 차이라는 것을 추측하고 있지만 아직 헌신하지 않았습니다. 따라서 내 프로그램은 CMD에서 실행할 때만 ANSI 만 출력 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top