Skip to content

Instantly share code, notes, and snippets.

@drlsdee
Created March 5, 2025 07:18
Show Gist options
  • Save drlsdee/64d5a1a959b048ec2e8e45820e018620 to your computer and use it in GitHub Desktop.
Save drlsdee/64d5a1a959b048ec2e8e45820e018620 to your computer and use it in GitHub Desktop.
Converts strings from one encoding to another
function ConvertTo-CrocoZyabra {
[CmdletBinding()]
param (
[Parameter(Mandatory,Position=0,ValueFromPipeline)]
[AllowNull()][AllowEmptyString()]
[Alias('i')]
[string]$InputString,
[Parameter(Mandatory,Position=1,ParameterSetName='CodePage')]
[ValidateRange(1,65535)]
[Alias('scp')]
[int]$SourceCodePage,
[Parameter(Mandatory,Position=2,ParameterSetName='CodePage')]
[ValidateRange(1,65535)]
[Alias('dcp')]
[int]$DestinationCodePage,
[Parameter(Mandatory,Position=1,ParameterSetName='Name')]
[ValidateNotNullOrEmpty()]
[Alias('sn')]
[string]$SourceName,
[Parameter(Mandatory,Position=2,ParameterSetName='Name')]
[ValidateNotNullOrEmpty()]
[Alias('dn')]
[string]$DestinationName,
[Parameter(Mandatory,Position=1,ParameterSetName='Encoding')]
[ValidateNotNull()]
[Alias('se')]
[System.Text.Encoding]$SourceEncoding,
[Parameter(Mandatory,Position=2,ParameterSetName='Encoding')]
[ValidateNotNull()]
[Alias('de')]
[System.Text.Encoding]$DestinationEncoding
)
begin {
if (-not ($PSCmdlet.ParameterSetName -ieq 'Encoding')) {
Write-Verbose -Message "Parameter set: $($PSCmdlet.ParameterSetName)" -Verbose
if ($PSCmdlet.ParameterSetName -ieq 'Name') {
Write-Verbose -Message "Source NAME: $($SourceName)" -Verbose
$SourceEncoding = [System.Text.Encoding]::GetEncoding($SourceName)
Write-Verbose -Message "Destination NAME: $($DestinationName)" -Verbose
$DestinationEncoding = [System.Text.Encoding]::GetEncoding($DestinationName)
}
else {
Write-Verbose -Message "Source CP: $($SourceCodePage)" -Verbose
$SourceEncoding = [System.Text.Encoding]::GetEncoding($SourceCodePage)
Write-Verbose -Message "Destination CP: $($DestinationCodePage)" -Verbose
$DestinationEncoding = [System.Text.Encoding]::GetEncoding($DestinationCodePage)
}
}
}
process {
if ([string]::IsNullOrEmpty($InputString) -or [string]::IsNullOrWhiteSpace($InputString)) { return [string]::Empty }
return $DestinationEncoding.GetString($SourceEncoding.GetBytes($InputString))
}
end {}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment