相关疑难解决方法(0)

将PowerShell的默认输出编码更改为UTF-8

默认情况下,当您将命令的输出重定向到文件或将其传递到PowerShell中的其他内容时,编码为UTF-16,这是无用的.我想把它改成UTF-8.

它可以通过替换>foo.txt语法来逐个进行,| out-file foo.txt -encoding utf8但是每次都必须重复这是很尴尬的.

在PowerShell中设置内容的持久方法是将它们放入\Users\me\Documents\WindowsPowerShell\profile.ps1; 我已经验证这个文件确实是在启动时执行的.

有人说输出编码可以设置,$PSDefaultParameterValues = @{'Out-File:Encoding' = 'utf8'}但我已经尝试过,它没有任何效果.

https://blogs.msdn.microsoft.com/powershell/2006/12/11/outputencoding-to-the-rescue/谈到$OutputEncoding乍一看似乎应该是相关的,但后来谈到输出被编码在ASCII中,这不是实际发生的事情.

如何设置PowerShell使用UTF-8?

powershell utf-8 character-encoding

70
推荐指数
1
解决办法
8万
查看次数

PowerShell的UTF-8输出

我正在尝试使用Process.Start重定向的I/O来调用PowerShell.exe字符串,并以UTF-8的形式返回输出.但我似乎无法做到这一点.

我尝试过的:

  • 传递命令以通过-Command参数运行
  • 使用UTF-8编码将PowerShell脚本作为文件写入磁盘
  • 使用具有BOM编码的UTF-8将PowerShell脚本作为文件写入磁盘
  • 使用UTF-16将PowerShell脚本作为文件写入磁盘
  • 设置Console.OutputEncoding在这两个我的控制台应用程序,并在PowerShell脚本
  • $OutputEncoding在PowerShell中设置
  • 设置 Process.StartInfo.StandardOutputEncoding
  • Encoding.Unicode而不是做到这一切Encoding.UTF8

在每种情况下,当我检查我给出的字节时,我会得到与原始字符串不同的值.我真的很想解释为什么这不起作用.

这是我的代码:

static void Main(string[] args)
{
    DumpBytes("Héllo");

    ExecuteCommand("PowerShell.exe", "-Command \"$OutputEncoding = [System.Text.Encoding]::UTF8 ; Write-Output 'Héllo';\"",
        Environment.CurrentDirectory, DumpBytes, DumpBytes);

    Console.ReadLine();
}

static void DumpBytes(string text)
{
    Console.Write(text + " " + string.Join(",", Encoding.UTF8.GetBytes(text).Select(b => b.ToString("X"))));
    Console.WriteLine();
}

static int ExecuteCommand(string executable, string arguments, string workingDirectory, Action<string> output, Action<string> error)
{
    try
    {
        using …
Run Code Online (Sandbox Code Playgroud)

powershell encoding utf-8 character-encoding io-redirection

44
推荐指数
2
解决办法
10万
查看次数

在 PowerShell 中进行管道传输时,如何确保 Python 打印 UTF-8(而不是 UTF-16-LE)?

我想在通过管道传输(例如,文件)时将文本打印为 UTF-8,因此在 Windows 10 上的 Python 3.7.3 上通过 PowerShell,我这样做:

import sys

if not sys.stdout.isatty():
    sys.stdout.reconfigure(encoding='utf-8')

print("Mamma mia.")
Run Code Online (Sandbox Code Playgroud)

当 run as 时encodingtest.py > test.txttest.txt结果是这样的:

00000000  FF FE 4D 00 61 00 6D 00 6D 00 61 00 20 00 6D 00  ÿþM.a.m.m.a. .m.
00000010  69 00 61 00 2E 00 0D 00 0A 00                    i.a.......
Run Code Online (Sandbox Code Playgroud)

奇怪的是,它以 开头FF FE,它是 UTF-16-LE 的字节顺序标记——并且在字符之间打印空字节(就像 UTF-16 那样)!但是,当我通过 CMD 而不是 PowerShell 运行它时,它可以很好地打印 UTF-8。即使通过 PowerShell 进行管道传输,我如何让 Python 打印 UTF-8?

我可以运行encodingtest.py …

python powershell utf-8 character-encoding

6
推荐指数
1
解决办法
80
查看次数

如何通过 PowerShell 在 python 中读取文本文件?Windows 10

我在将文本文件读入 python 程序时遇到问题。

import sys

words = sys.stdin.readlines()
Run Code Online (Sandbox Code Playgroud)

我正在通过标准输入读取文件,但是当我尝试执行该程序时,出现此错误。

PS> python evil_61.py < evilwords.txt

At line:1 char:19
+ python evil_61.py < evilwords.txt
+                   ~

The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何运行这些类型的程序,因为它对我的课程至关重要,而且我宁愿使用 Windows 而不是 Linux。

python powershell

5
推荐指数
1
解决办法
3280
查看次数

通过 CMD 和 PowerShell 管道时的不同行为和输出

我正在尝试将文件的内容通过管道传输到我制作的一个简单的 ASCII 对称加密程序。这是一个简单的程序,它从 STDIN 读取输入并对输入的每个字节添加或减去某个值 (224)。例如:如果第一个字节是 4,我们要加密,那么它变成 228。如果超过 255,程序只是执行一些模运算。

这是我用 cmd 得到的输出(test.txt 包含“这是一个测试”):

    type .\test.txt | .\Crypt.exe --encrypt | .\Crypt.exe --decrypt
    this is a test
Run Code Online (Sandbox Code Playgroud)

它也以另一种方式工作,因此它是一种对称加密算法

    type .\test.txt | .\Crypt.exe --encrypt | .\Crypt.exe --decrypt
    this is a test
Run Code Online (Sandbox Code Playgroud)

但是,PowerShell 上的行为是不同的。首先加密时,我得到:

    type .\test.txt | .\Crypt.exe --decrypt | .\Crypt.exe --encrypt
    this is a test
Run Code Online (Sandbox Code Playgroud)

这就是我首先解密时得到的:

截屏

可能是编码问题。提前致谢。

powershell encoding cmd pipe

5
推荐指数
1
解决办法
680
查看次数

在PowerShell 2.0中将编码设置为ANSI

我想设置一个文件的编码采用的参数为ANSI -Encoding的的Set-Contentcmdlet的,我想这一个,但它没有工作:

Set-Content -LiteralPath "$filePath" -Encoding Default
Run Code Online (Sandbox Code Playgroud)

powershell encoding ansi cmdlet powershell-2.0

3
推荐指数
1
解决办法
2万
查看次数

回显到文件而不带换行符(批量)

我的生活创造者程序有问题。它只是选择代表某些内容的随机数并将其放在一起。(我尝试过组合变量)这里是代码:

@set num=1
@SET /A a=%RANDOM% * 10 / 32768 + 1
@if %a% == 10 set life%num%= ----
@if %a% == 9 set life%num%=O
@if %a% == 8 set life%num%=^
@if %a% == 7 set life%num%=%
@if %a% == 6 set life%num%=#
@if %a% == 5 set life%num%=@
@if %a% == 4 set life%num%=)
@if %a% == 3 set life%num%=()
@if %a% == 2 set life%num%=~
@if %a% == 1 set life%num%=OO
@echo %a% >"gencode".txt
@set num=2
@SET /A …
Run Code Online (Sandbox Code Playgroud)

batch-file line

1
推荐指数
1
解决办法
6778
查看次数