[玩转系统] 关于字符编码
作者:精品下载站 日期:2024-12-14 02:24:23 浏览:15 分类:玩电脑
关于字符编码
简短描述
描述 PowerShell 如何使用字符编码进行字符串数据的输入和输出。
详细描述
Unicode 是全球字符编码标准。系统专门使用 Unicode 进行字符和字符串操作。有关 Unicode 各方面的详细说明,请参阅 Unicode 标准。
Windows 支持 Unicode 和传统字符集。传统字符集(例如 Windows 代码页)使用 8 位值或 8 位值的组合来表示特定语言或地理区域设置中使用的字符。
PowerShell 默认使用 Unicode 字符集。但是,一些 cmdlet 具有 Encoding 参数,可以指定不同字符集的编码。此参数允许您选择与其他系统和应用程序互操作所需的特定字符编码。
以下 cmdlet 具有 Encoding 参数:
-
Microsoft.PowerShell.Management
- Add-Content
- Get-Content
- Set-Content
Microsoft.PowerShell.Utility
- Export-Clixml
字节顺序标记
字节顺序标记 (BOM) 是文件或文本流的前几个字节中的 Unicode 签名,指示数据使用哪种 Unicode 编码。有关更多信息,请参阅字节顺序标记文档。
在 Windows PowerShell 中,任何 Unicode 编码(UTF7
除外)始终会创建 BOM。对于所有文本输出,PowerShell(v6 及更高版本)默认为 utf8NoBOM
。
为了获得最佳的整体兼容性,请避免在 UTF-8 文件中使用 BOM。 Unix 平台和 Windows 平台上使用的 Unix 继承实用程序不支持 BOM。
同样,应避免 UTF7
编码。 UTF-7 不是标准的 Unicode 编码,在所有版本的 PowerShell 中都是不带 BOM 编写的。
在类 Unix 平台上创建 PowerShell 脚本或在 Windows 上使用跨平台编辑器(例如 Visual Studio Code)会生成使用 UTF8NoBOM
编码的文件。这些文件在 PowerShell 中工作正常,但如果文件包含非 Ascii 字符,则可能会在 Windows PowerShell 中损坏。
如果您需要在脚本中使用非 Ascii 字符,请将它们保存为带有 BOM 的 UTF-8。如果没有 BOM,Windows PowerShell 会将您的脚本误解为使用旧版“ANSI”代码页进行编码。相反,具有 UTF-8 BOM 的文件在类 Unix 平台上可能会出现问题。许多 Unix 工具如 cat
、sed
、awk
和一些编辑器如 gedit
不知道如何操作来处理BOM。
Windows PowerShell 中的字符编码
在 PowerShell 5.1 中,Encoding 参数支持以下值:
Ascii
使用 Ascii(7 位)字符集。BigEndianUnicode
使用具有大端字节顺序的 UTF-16。BigEndianUTF32
使用具有大端字节顺序的 UTF-32。Byte
将一组字符编码为字节序列。默认
使用与系统活动代码页相对应的编码(通常为 ANSI)。Oem
使用与系统当前 OEM 代码页相对应的编码。字符串
与Unicode
相同。Unicode
使用 UTF-16 和小端字节顺序。未知
与Unicode
相同。UTF32
使用具有小端字节顺序的 UTF-32。UTF7
使用 UTF-7。UTF8
使用 UTF-8(带 BOM)。
通常,Windows PowerShell 默认使用 Unicode UTF-16LE 编码。但是,Windows PowerShell 中 cmdlet 使用的默认编码并不一致。
笔记
使用任何 Unicode 编码(UTF7
除外)总是会创建 BOM。
对于将输出写入文件的 cmdlet:
Out-File
和重定向运算符>
和>>
创建 UTF-16LE,这与Set-Content
明显不同> 和添加内容
。New-ModuleManifest
和Export-CliXml
还会创建 UTF-16LE 文件。当目标文件为空或不存在时,
Set-Content
和Add-Content
使用Default
编码。默认
是由活动系统区域设置的 ANSI 旧代码页指定的编码。Export-Csv
创建Ascii
文件,但在使用 Append 参数时使用不同的编码(见下文)。Export-PSSession
默认情况下创建带有 BOM 的 UTF-8 文件。New-Item -Type File -Value
创建一个无 BOM 的 UTF-8 文件。Send-MailMessage
默认使用Ascii
编码。-
Start-Transcript
创建带有 BOM 的Utf8
文件。当使用Append参数时,编码可以不同(见下文)。
对于附加到现有文件的命令:
Out-File -Append
和>>
重定向运算符不会尝试匹配现有目标文件内容的编码。相反,除非使用 Encoding 参数,否则它们使用默认编码。附加内容时必须使用文件原始编码。如果没有显式 Encoding 参数,
Add-Content
会检测现有编码并自动将其应用到新内容。如果现有内容没有 BOM,则使用默认
ANSI 编码。Add-Content
的行为在 PowerShell(v6 及更高版本)中是相同的,只是默认编码为Utf8
。当目标文件包含 BOM 时,
Export-Csv -Append
与现有编码匹配。在没有 BOM 的情况下,它使用Utf8
编码。Start-Transcript -Append
与包含 BOM 的文件的现有编码相匹配。如果没有 BOM,则默认为Ascii
编码。当转录本中的数据包含多字节字符时,此编码可能会导致数据丢失或字符损坏。
对于在没有 BOM 的情况下读取字符串数据的 cmdlet:
Get-Content
和Import-PowerShellDataFile
使用Default
ANSI 编码。 PowerShell 引擎从文件读取源代码时也使用 ANSI。Import-Csv
、Import-CliXml
和Select-String
在没有 BOM 的情况下假定为Utf8
。
PowerShell 中的字符编码
在 PowerShell(v7.1 及更高版本)中,Encoding 参数支持以下值:
ascii
:使用 ASCII(7 位)字符集的编码。ansi
:使用当前区域性的 ANSI 代码页的编码。此选项是在 PowerShell 7.4 中添加的。bigendianunicode
:使用 big-endian 字节顺序以 UTF-16 格式进行编码。bigendianutf32
:使用 big-endian 字节顺序以 UTF-32 格式进行编码。oem
:使用 MS-DOS 和控制台程序的默认编码。unicode
:使用小端字节顺序以 UTF-16 格式进行编码。utf7
:以UTF-7格式编码。utf8
:以 UTF-8 格式编码(无 BOM)。utf8BOM
:使用字节顺序标记 (BOM) 以 UTF-8 格式进行编码utf8NoBOM
:以 UTF-8 格式编码,不带字节顺序标记 (BOM)utf32
:使用小端字节顺序以 UTF-32 格式进行编码。
对于所有输出,PowerShell 默认为 utf8NoBOM
。
从 PowerShell 6.2 开始,Encoding 参数还允许使用注册代码页的数字 ID(例如 -Encoding 1251
)或注册代码页的字符串名称(例如 -Encoding “windows-1251”
)。有关详细信息,请参阅 Encoding.CodePage 的 .NET 文档。
从 PowerShell 7.4 开始,您可以使用 Encoding 参数的 Ansi
值来传递当前区域性 ANSI 代码页的数字 ID,而无需手动指定。
更改默认编码
PowerShell 有两个默认变量,可用于更改默认编码行为。
$PSDefaultParameterValues
$OutputEncoding
有关详细信息,请参阅 about_Preference_Variables。
从 PowerShell 5.1 开始,重定向运算符(>
和 >>
)调用 Out-File
cmdlet。因此,您可以使用 $PSDefaultParameterValues
首选项变量设置它们的默认编码,如下例所示:
$PSDefaultParameterValues['Out-File:Encoding'] = 'utf8'
使用以下语句更改具有 Encoding 参数的所有 cmdlet 的默认编码。
$PSDefaultParameterValues['*:Encoding'] = 'utf8'
这很重要
将此命令放入 PowerShell 配置文件中会使首选项成为会话全局设置,该设置会影响未显式指定编码的所有命令和脚本。
同样,您应该在脚本或模块中包含您希望以相同方式运行的命令。使用这些命令可确保 cmdlet 的行为方式相同,即使由其他用户、在不同计算机上或在不同版本的 PowerShell 中运行也是如此。
自动变量 $OutputEncoding
影响 PowerShell 用于与外部程序通信的编码。它对输出重定向运算符和 PowerShell cmdlet 用于保存到文件的编码没有影响。
参见
- about_Preference_Variables
- 字节顺序标记
- 代码页 - Win32 应用程序
- 编码.代码页
- .NET 中的字符编码简介
- 统一码标准
- UTF-16LE
猜你还喜欢
- 03-30 [玩转系统] 如何用批处理实现关机,注销,重启和锁定计算机
- 02-14 [系统故障] Win10下报错:该文件没有与之关联的应用来执行该操作
- 01-07 [系统问题] Win10--解决锁屏后会断网的问题
- 01-02 [系统技巧] Windows系统如何关闭防火墙保姆式教程,超详细
- 12-15 [玩转系统] 如何在 Windows 10 和 11 上允许多个 RDP 会话
- 12-15 [玩转系统] 查找 Exchange/Microsoft 365 中不活动(未使用)的通讯组列表
- 12-15 [玩转系统] 如何在 Windows 上安装远程服务器管理工具 (RSAT)
- 12-15 [玩转系统] 如何在 Windows 上重置组策略设置
- 12-15 [玩转系统] 如何获取计算机上的本地管理员列表?
- 12-15 [玩转系统] 在 Visual Studio Code 中连接到 MS SQL Server 数据库
- 12-15 [玩转系统] 如何降级 Windows Server 版本或许可证
- 12-15 [玩转系统] 如何允许非管理员用户在 Windows 中启动/停止服务
取消回复欢迎 你 发表评论:
- 精品推荐!
-
- 最新文章
- 热门文章
- 热评文章
[影视] 黑道中人 Alto Knights(2025)剧情 犯罪 历史 电影
[古装剧] [七侠五义][全75集][WEB-MP4/76G][国语无字][1080P][焦恩俊经典]
[实用软件] 虚拟手机号 电话 验证码 注册
[电视剧] 安眠书店/你 第五季 You Season 5 (2025) 【全10集】
[电视剧] 棋士(2025) 4K 1080P【全22集】悬疑 犯罪 王宝强 陈明昊
[软件合集] 25年6月5日 精选软件22个
[软件合集] 25年6月4日 精选软件36个
[短剧] 2025年06月04日 精选+付费短剧推荐33部
[短剧] 2025年06月03日 精选+付费短剧推荐25部
[软件合集] 25年6月3日 精选软件44个
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电视剧] 欢乐颂.5部全 (2016-2024)
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[影视] 【稀有资源】香港老片 艺坛照妖镜之96应召名册 (1996)
[剧集] 神经风云(2023)(完结).4K
[剧集] [BT] [TVB] [黑夜彩虹(2003)] [全21集] [粤语中字] [TV-RMVB]
[实用软件] 虚拟手机号 电话 验证码 注册
[资源] B站充电视频合集,包含多位重量级up主,全是大佬真金白银买来的~【99GB】
[影视] 内地绝版高清录像带 [mpg]
[书籍] 古今奇书禁书三教九流资料大合集 猎奇必备珍藏资源PDF版 1.14G
[电视剧] [突围] [45集全] [WEB-MP4/每集1.5GB] [国语/内嵌中文字幕] [4K-2160P] [无水印]
[剧集] [央视][笑傲江湖][2001][DVD-RMVB][高清][40集全]李亚鹏、许晴、苗乙乙
[电影] 美国队长4 4K原盘REMUX 杜比视界 内封简繁英双语字幕 49G
[电影] 死神来了(1-6)大合集!
[软件合集] 25年05月13日 精选软件16个
[精品软件] 25年05月15日 精选软件18个
[绝版资源] 南与北 第1-2季 合集 North and South (1985) /美国/豆瓣: 8.8[1080P][中文字幕]
[软件] 25年05月14日 精选软件57个
[短剧] 2025年05月14日 精选+付费短剧推荐39部
[短剧] 2025年05月15日 精选+付费短剧推荐36部
- 最新评论
-
- 热门tag