首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Powershell -奇怪的WSL输出字符串编码

Powershell -奇怪的WSL输出字符串编码
EN

Stack Overflow用户
提问于 2020-09-28 15:05:34
回答 3查看 808关注 0票数 1

今天,我只想看看是否在我的windows工作站上安装了一个特定的子系统。因此,我使用(WSL)并安装Microsoft提供的Ubuntu。现在,我正在尝试一种检查它是否以编程方式安装的方法。

我有这样的输出:

代码语言:javascript
复制
PS C:\> wsl -l -v
NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2

我需要知道是否安装了"Ubuntu-20.04“。我试过很多东西,但没有什么能像:

代码语言:javascript
复制
$state = wsl -l -v
if($state -like '*Ubuntu*') {
      Write-Host 'Installed'
} else {
      Write-Host 'Nope'
}

但不起作用。你有线索给我吗?谢谢大家!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-09-28 15:21:29

这似乎是一个编码问题。字符串中有(不可见的)空字符。我还在努力找出处理这件事的最佳方法。

同时..。下面是一个快速解决方案:

代码语言:javascript
复制
$state = (wsl -l -v) -replace "\x00",""

更新

另一个解决方法,但这将更改整个会话的编码:

代码语言:javascript
复制
[System.Console]::OutputEncoding = [System.Text.Encoding]::Unicode
票数 3
EN

Stack Overflow用户

发布于 2021-01-25 21:12:40

如果您从WSL本身或Windows运行wsl,您可以使用它来转换:

代码语言:javascript
复制
wsl -l -v | iconv -f UTF-16LE -t UTF-8
票数 0
EN

Stack Overflow用户

发布于 2022-07-27 17:59:45

您的示例代码现在将在最新的WSL预览版(0.64.0)中正确地使用opt修复程序,但请注意(至少在预览中)它只对Windows 11用户可用。

要选择加入(以便在您实现了像前面的答案那样的解决方案时不会意外地破坏旧代码),只需设置WSL_UTF8环境变量的值为1 (只有此值才能工作)。

例如,来自PowerShell:

代码语言:javascript
复制
$env:WSL_UTF8=1

或者,如果需要,可以在Windows中全局设置它。

如果从WSL本身运行wsl.exe,请参阅这个答案获取使用WSLENV的示例代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64104790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档