相关疑难解决方法(0)

如何在Windows命令行中使用unicode字符?

我们在Team Foundation Server(TFS)中有一个项目,其中包含非英语字符(š).当我试图编写一些与构建相关的东西时,我们偶然发现了一个问题 - 我们无法将š字母传递给命令行工具.命令提示符或其他什么不是搞砸了,并且tf.exe实用程序找不到指定的项目.

我已经尝试了.bat文件的不同格式(ANSI,带有和不带BOM的 UTF-8 )以及用JavaScript编写脚本(这本身就是Unicode) - 但没有运气.如何执行程序并将其传递给Unicode命令行?

unicode command-line input windows-console

299
推荐指数
12
解决办法
40万
查看次数

将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万
查看次数

Monospace Unicode字体

任何人都可以告诉我覆盖大部分unicode字符的等宽字体如果不是那么包含大部分欧洲语言字符集的等宽字体?

unicode fonts

24
推荐指数
6
解决办法
2万
查看次数

PowerShell 会话中的字符编码 (UTF-8)

大家好,

作为控制台/终端爱好者和数据库管理员 (PostgreSQL),使用正确的字符编码对我来说至关重要。因此,我希望我的客户端控制台/终端窗口始终设置为例如 UTF-8。

回到 Windows 的 CMD.EXE,这个尝试就像输入命令chcp 65001来设置所需的代码页标识符一样简单。现在,我正在切换到 PowerShell 并且设置字符编码似乎很奇怪,恕我直言。

我已经对如何将 PowerShell 会话设置为 UTF-8 进行了一些研究,我发现我需要三个步骤/命令来完成它。

PS C:\> $OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> [Console]::OutputEncoding = [System.Text.Encoding]::UTF8
PS C:\> chcp 65001
Run Code Online (Sandbox Code Playgroud)

尽管前两个命令不直观且难以记住...遗漏其中一个命令会导致无法正常工作!此外,仅设置其中一个似乎对其他人没有影响。

因此,我必须设置所有三个以使用 PostgreSQL 的psql数据库客户端。否则我在导出/导入数据时会遇到编码问题。

现在我的问题是:“为什么?难道没有更简单的方法可以在 PowerShell 中简单地设置字符编码吗?” 不幸的是,我自己没有找到任何关于设置字符编码的合理文档!

提前致谢


/编辑

TheIncorrigible1的第二条评论让我得到了迄今为​​止最好的答案:在 Powershell 中显示 Unicode - 因此可以将整个 PowerShell 与两个单独的语句设置为所需的编码 (UTF-8)。

PS C:\> $OutputEncoding = [System.Console]::OutputEncoding = [System.Console]::InputEncoding = [System.Text.Encoding]::UTF8
PS C:\> $PSDefaultParameterValues['*:Encoding'] = 'utf8'
Run Code Online (Sandbox Code Playgroud)

解释:

  • $OutputEncoding设置例如|(管道)和/或程序和/或进程之间的通信的编码。 …

windows postgresql powershell character-encoding

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

如何在 Windows 上的 Go (golang) 中打印 UTF-8(或 unicode)字符

让我们看看这个:

\n\n
\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c\n
Run Code Online (Sandbox Code Playgroud)\n\n

正如您所看到的,有一个 unicode 复选标记和中文/日文字符。在 go 中,如果我使用 MSYS 或 linux 环境,我可以轻松打印这些字符。即使在窗户上。但是,我无法在CMD或 中看到它们Powershell

\n\n

我懂了:

\n\n

电源外壳

\n\n

这是我非常基本的代码:

\n\n
package main\n\nimport (\n    "fmt"\n)\n\nfunc main() {\n\n    fmt.Println("\xe2\x9c\x93 Hello, \xe4\xb8\x96\xe7\x95\x8c")\n    // OR\n    fmt.Println("\\u2713 Hello, \xe4\xb8\x96\xe7\x95\x8c")\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此外,我有数十个控制台应用程序,它们能够使用 cmd 或 powershell 在我的窗口上显示此类字符。为什么去不了?

\n

console powershell go

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

如何在没有 BOM 的情况下重定向 PowerShell 中的输入?

我正在尝试通过以下方式重定向 PowerShell 中的输入:

Get-Content input.txt | my-program args
Run Code Online (Sandbox Code Playgroud)

问题是管道 UTF-8 文本前面有一个 BOM (0xEFBBBF),我的程序无法正确处理它。

一个最小的工作示例:

// File: Hex.java
import java.io.IOException;

public class Hex {
    public static void main(String[] dummy) {
        int ch;
        try {
            while ((ch = System.in.read()) != -1) {
                System.out.print(String.format("%02X ", ch));
            }
        } catch (IOException e) {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 PowerShell 中:

javac Hex.java
Set-Content textfile "ABC" -Encoding Ascii
# Now the content of textfile is 0x41 42 43 0D 0A
Get-Content textfile | java Hex
Run Code Online (Sandbox Code Playgroud)

或者干脆 …

powershell encoding byte-order-mark pipe

6
推荐指数
2
解决办法
750
查看次数

在命令提示符/ Windows Powershell(Windows 10)中使用UTF-8编码(CHCP 65001)

我已经chcp 65001在命令提示符和Windows Powershell中强制使用了一段时间,但是从SO和其他几个社区的问答环节来看,这似乎是一种危险且低效的解决方案。Microsoft是否提供一种chcp 65001可以永久保存而无需手动更改注册表的改进/完整替代方案?如果没有,将来是否有公开宣布的时间表或议程来支持Windows CLI中的UTF-8?

我个人已经使用了chcp 949韩国字符支持,但反斜线的怪异显示\在多个应用程序(如Neovim),以及字符和不正确/难以理解的显示器是不是韩国未通过支持949似乎变得更加的最近有问题。

windows powershell utf-8 console-application

5
推荐指数
2
解决办法
3580
查看次数

Kotlin 将非英语字符打印为问号

我正在尝试从 Kotlin 程序(在控制台上运行)打印希伯来语字符。

\n

所有希伯来字符都作为问号输出。

\n

我创建了以下简单的test.kts脚本文件进行测试:

\n
println("\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d \xd7\x9e\xd7\xa7\xd7\x95\xd7\x98\xd7\x9c\xd7\x99\xd7\x9f")\n\n// Try to print a simple non-Hebrew character too\nprintln("\\u0394") // Greek Delta\n
Run Code Online (Sandbox Code Playgroud)\n

文件已正确保存为 UTF-8 格式。

\n

它打印:

\n
???? ???????\n?\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试在命令提示符、PowerShell(在其本机窗口和 Windows 终端中)和 Git Bash 中运行它,所有这些都给出相同的结果。我还尝试将输出重定向到文件以排除 shell 中的显示问题。

\n

为了确保问题不是控制台本身的问题,我还制作了简单的test.battest.ps1、 和test.sh文件,其中包含以下内容:

\n
echo "\xd7\xa9\xd7\x9c\xd7\x95\xd7\x9d \xd7\x9e\xd7\xa7\xd7\x95\xd7\x98\xd7\x9c\xd7\x99\xd7\x9f"\n
Run Code Online (Sandbox Code Playgroud)\n

所有三个 shell 都正确显示了希伯来语文本,表明问题出在 Kotlin 的输出中,而不是 shell 显示中。(虽然 PowerShell 要求文件保存为“UTF-8 with BOM”才能正确显示,但这不是 Kotlin 的问题,因为 Kotlin 甚至不会运行使用 BOM 保存的脚本。)

\n

据我所知,Kotlin 应该默认支持 UTF-8 输出,无需配置。

\n

我怎样才能得到正确的输出?

\n …

utf-8 kotlin

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

将 nodejs 程序的输出重定向到文件时编码错误(Windows 10 powershell 可能存在问题)

我有一个简单的 javascript 文件(我们称之为 index.js),其中包含以下内容:

\n
console.log('p\xc3\xa9rola');\n
Run Code Online (Sandbox Code Playgroud)\n

我在 Windows 10 上使用 VSCode,当我使用以下命令执行文件时,它使用 powershell 作为终端:

\n
node index.js\n
Run Code Online (Sandbox Code Playgroud)\n

我得到以下输出:

\n
p\xc3\xa9rola\n
Run Code Online (Sandbox Code Playgroud)\n

如果我运行以下命令:

\n
node index.js > output.txt\n
Run Code Online (Sandbox Code Playgroud)\n

我在文件中得到以下信息:

\n
p\xe2\x94\x9c\xc2\xaerola\n
Run Code Online (Sandbox Code Playgroud)\n

写入文件时,powershell 的编码似乎存在一些问题,当我在 VSCode 上打开文件时,我可以在右下角看到编码是 UTF-16 LE。

\n

我也已经尝试过以下操作:

\n
node index.js | out-file -encoding utf8 output.txt\n
Run Code Online (Sandbox Code Playgroud)\n

该文件以带有 BOM 的 UTF8 格式保存,但编码仍然错误,因为我看到的是p\xe2\x94\x9c\xc2\xaerola而不是p\xc3\xa9rola

\n

有人可以解释一下这里出了什么问题吗?\n谢谢。

\n

powershell encoding node.js

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

PowerShell“少”工具

不是与此相关的其他各种问题的重复(我回顾了它们,但在我看到的问题中没有得到回答)。这些其他问题都围绕着Out-Host -Pagingmore即使它们less在问题标题中提到)。

为了关注这一特定点,有谁知道less在 Microsoft Windows 环境下复制 的功能的 PowerShell 方法吗?即使我们能够向下和向上滚动文档(使用光标键逐行或使用 PgUp / PgDn 键逐页)以查看帮助和其他文件(例如,以便我们可以执行操作Get-Help Get-ChildItem -Full | less)。

这将非常有用。我并不追求lessWindows 的第 3 方可执行工具(因为它不会启用管道等)(当然有很多)。我相信 PSCX 中有这样的东西,但每当我尝试安装它时,我都会看到很多冲突,并且我不确定是否使用它,-AllowClobber以防它破坏其他东西。也许在这一点上,如果有的less话,有没有人能够分离出该功能并独立于 PSCX 使用?

console powershell

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

命令行查找和替换后特殊字符变成问号

我有一个文本文件input.xlf

\n
  <trans-unit id="loco:5e7257a0c38e0f5b456bae94">\n    &lt;source&gt;Login</source>\n    <target>\xe7\x99\xbb\xe5\x85\xa5</target>\n    <note>Login Header</note>\n  </trans-unit>\n
Run Code Online (Sandbox Code Playgroud)\n

基本上我需要&lt;<和替换&gt;\'>\',所以我运行下面的脚本

\n

跑步者.bat

\n
powershell -Command "(gc input.xlf) -replace \'&lt;\', \'<\' | Out-File -encoding ASCII output.xlf";\npowershell -Command "(gc output.xlf) -replace \'&gt;\', \'>\' | Out-File -encoding ASCII  output.xlf";\n
Run Code Online (Sandbox Code Playgroud)\n

上面的内容一直有效,直到我注意到下面的输出

\n
  <trans-unit id="loco:5e7257a0c38e0f5b456bae94">\n    <source>Login</source>\n    <target>??????</target>\n    <note>Login Header</note>\n  </trans-unit>\n\n
Run Code Online (Sandbox Code Playgroud)\n

我尝试删除编码,但现在我得到了

\n
 <trans-unit id="loco:5e7257a0c38e0f5b456bae94">\n   <source>Login</source>\n   <target>\xc3\xa7\xe2\x84\xa2\xc2\xbb\xc3\xa5\xe2\x80\xa6\xc2\xa5</target>\n   <note>Login Header</note>  \n </trans-unit>\n\n
Run Code Online (Sandbox Code Playgroud)\n

以下是我想要的输出

\n
  <trans-unit id="loco:5e7257a0c38e0f5b456bae94">\n    <source>Login</source>\n    <target>\xe7\x99\xbb\xe5\x85\xa5</target>\n    <note>Login Header</note>\n  </trans-unit>\n
Run Code Online (Sandbox Code Playgroud)\n

powershell automation cmd

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

无 BOM 的写输出

如果我运行这样的命令:

Write-Output March > a.txt
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

        U+FEFF    
M       U+004D          
a       U+0061          
r       U+0072    
c       U+0063          
h       U+0068 
        U+000D       
\n      U+000A       
Run Code Online (Sandbox Code Playgroud)

我不想要 BOM。我尝试了不同的操作,如下所示:

$OutputEncoding = [System.Text.UTF8Encoding]::new($false)
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
[Console]::InputEncoding = [System.Text.UTF8Encoding]::new($false)
[Console]::OutputEncoding = [System.Text.UTF8Encoding]::new($false)
Run Code Online (Sandbox Code Playgroud)

但他们似乎都没有解决这个问题。注意我使用的是 PowerShell 5.1。我确实看到了一些类似的问题,但与此不完全相同,因为他们正在处理管道和外部命令。

powershell byte-order-mark utf-8

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