【问题标题】:How can I get the number of bytes in a newline from PowerShell?如何从 PowerShell 获取换行符中的字节数?
【发布时间】:2018-07-31 09:38:15
【问题描述】:

DOS/Windows 换行符是两 (2) 个字节,0x0D0A。 UNIX/Linux 换行符是一 (1) 个字节,0x0A。 Mac 换行符是一 (1) 个字节,0x0D。

如何编写代码来查找每个平台上换行符的长度? Windows 上的输出将产生两 (2) 个字节,但 Linux 上的输出将产生一 (1) 个字节。我在about_Special_Characters 中没有找到与此相关的任何内容。

在 Windows 上:

PS C:\src\t> type .\nl.ps1
'`n'
'`n'.Length
"`n"
"`n".Length

Windows 和 Linux 返回相同的结果。

PS C:\src\t> .\nl.ps1
`n
2


1

【问题讨论】:

  • 转义符不会在字符串文字(单引号)中处理,这就是为什么您会看到第一个长度为 2。
  • Length 字符串属性只会显示字符数,而不显示字节数。实际字节数将取决于您使用的编码。例如,在使用 UTF-16 编码的 Windows 上,换行符将占用 4 个字节。
  • 顺便说一句,当经典的 Mac OS 在 2001 年成为 OS X 时,它获得了 Unix 基础,从那时起 macOS(现在众所周知)一直使用 LF-only (0xA) 换行(不是过时的 CR-only (0xD))换行符,就像其他类 Unix 平台一样。
  • 在 Windows 上,“换行符”不是 2 个字节。 “新行”由两个字符的序列而不是一个字符表示。但 "`n".length=1 在两个平台上。

标签: powershell powershell-v6.0


【解决方案1】:

.NET Standard 有一个 API,并且在 Powershell 中始终可用:

[system.environment]::newline.length

在 Windows 上

PS> [system.environment]::newline.length
2

在 Ubuntu 上

PS> [system.environment]::newline.length      
1

【讨论】:

    猜你喜欢
    • 2014-07-05
    • 2021-05-02
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    • 2018-03-14
    • 2021-02-26
    • 2023-03-04
    相关资源
    最近更新 更多