programing

스크립트 내에서 리디렉션을 사용하면 유니코드 출력이 생성됩니다.싱글바이트 ASCII 텍스트를 내보내는 방법은?

cafebook 2023. 10. 5. 23:32
반응형

스크립트 내에서 리디렉션을 사용하면 유니코드 출력이 생성됩니다.싱글바이트 ASCII 텍스트를 내보내는 방법은?

Sandcastle Helpfile Builder를 사용하여 도움말 파일(.chm)을 생성하고 있습니다.프로젝트는 .shfbproj 파일로 XML 형식이며 msbuild와 함께 작동합니다.

생성된 .chm 파일에 나타나는 Footer 텍스트를 자동으로 업데이트하고 싶습니다.이 토막글을 사용합니다.

$newFooter = "<FooterText>MyProduct v1.2.3.4</FooterText>";

get-content  -Encoding ASCII $projFile.FullName | 
    %{$_ -replace '<FooterText>(.+)</FooterText>', $newFooter } > $TmpFile

move-item $TmpFile $projFile.FullName -force

$TmpFile로 향하는 출력은 항상 멀티바이트 문자열입니다.하지만 난 그걸 원하지 않아요.출력의 인코딩을 ASCII로 설정하려면 어떻게 해야 합니까?

파일에 쓰기 전에 $OutputEncoding 변수를 변경할 수 있습니다.다른 옵션은 사용하지 않는 것입니다.>연산자, 대신에 파이프를 직접 연결합니다.Out-File사용합니다.-Encoding매개 변수.

>리디렉션 연산자는 "shortcut"입니다.Out-File.Out-File의 기본 인코딩은 유니코드이지만 ASCII로 변경할 수 있으므로 다음으로 이동합니다.Out-File대신:

Get-Content -Encoding ASCII $projFile.FullName |
    % { $_ -replace '<FooterText>(.+)</FooterText>', $newFooter } |
    Out-File $tmpfile -Encoding ASCII

| sc filename트릭을 수행합니다(sc는 Set-Content의 별칭이 됨).

위해서>> filename사용하다| ac filename속임수를 수행합니다(ac는 Add-Content의 별칭이 됨).

저는 다음을 사용해야 한다는 것을 알았습니다.

write-output "First line" | out-file -encoding ascii OutputFileName
write-output "Next line" | out-file -encoding ascii -append OutputFileName
....

다음을 사용하여 출력 인코딩 변경:

$OutputEncoding = New-Object -typename System.Text.ASCIIEncoding

작동하지 않았습니다

out-file의 기본 인코딩을 asci로 설정할 수 있습니다.

$PSDefaultParameterValues=@{'out-file:encoding'='ascii'}

그러면 다음과 같은 것이 ASCII 파일로 나타납니다.

echo hi > out

powershell 6과 7에서 out-file의 기본 인코딩이 utf8 no bom으로 변경되었습니다.

스트림을 사용한 작은 예입니다. 원래 질문이 아니었다는 것을 알고 있습니다.

C:\temp\ConfirmWrapper.ps1 -Force -Verbose 4>&1 6>&1 | Out-File -Encoding default -FilePath C:\temp\confirmLog.txt -Append

정보(6) 및 장황한(4) 스트림을 출력(1) 스트림으로 출력하고 ANSI(default) 인코딩으로 아웃 파일로 리디렉션합니다.

언급URL : https://stackoverflow.com/questions/1707397/using-redirection-within-the-script-produces-a-unicode-output-how-to-emit-singl

반응형