代码,HTH:
Function Get-PythonString {
[CmdletBinding()]
[OutputType([System.String],[System.Int32[]])]
param(
[Parameter(Position=0, Mandatory, ValueFromPipeline)] [String]$pyStr='',
[Parameter()] [Switch] $AsArray
)
$retArr = [System.Collections.ArrayList]::new()
$retStr = ''
$highSur= ''
$i=0
while ( $i -lt $pyStr.Length ) {
if ( $pyStr.Chars($i) -eq '\' ) {
if ( $pyStr.Chars($i +1 ) -ceq 'U' ) {
$iAux = [int]("0x" + ($pyStr.Substring( $i+2, 8)))
$i += 10
} elseif ( $pyStr.Chars($i +1 ) -ceq 'u' ) {
$iAux = [int]("0x" + ($pyStr.Substring( $i+2, 4)))
$i += 6
} elseif ( $pyStr.Chars($i +1 ) -ceq 'x' ) {
$iAux = [int]("0x" + ($pyStr.Substring( $i+2, 2)))
$i += 4
} else {
$iAux = [int]$pyStr.Chars( $i )
$i++
}
} else {
$iAux = [int]$pyStr.Chars( $i )
$i++
}
if ( $iAux -gt 0xFFFF ) { # out of BMP } {
[void]$retArr.Add( [int]$iAux)
$retStr += [char]::ConvertFromUtf32( $iAux)
} else {
if ( [char]::IsHighSurrogate( [char]$iAux )) {
$highSur = [char]$iAux
} else {
if ( [char]::IsLowSurrogate( [char]$iAux )) {
$iAux = [int][char]::ConvertToUtf32( $highSur, [char]$iAux)
$highSur = ''
}
[void]$retArr.Add( [int]$iAux)
$retStr += [char]::ConvertFromUtf32( $iAux)
}
}
}
if ($AsArray.IsPresent) {
$retArr
} else {
$retStr
}
}
仅在 Python 字符串文字中识别的转义序列是:
Escape Sequence Meaning
\xnn Character with 8-bit hex value nn
\unnnn Character with 16-bit hex value nnnn
\Unnnnnnnn Character with 32-bit hex value nnnnnnnn
\N{name} Character named name in the Unicode database (not implemented)
用法示例:
Get-PythonString -pyStr "\x65\x78\x61\x6D\x70\x6C\x65, \u2764, \U0001F602 or \ud83d\udc4d"
example, ❤, or
"\x65\x78\x61\x6D\x70\x6C\x65, \u2764, \U0001F602 or \ud83d\udc4d"|Get-PythonString
example, ❤, or