Reemplazar-Caracter, o cuando todos los -Encodig no son suficientes

Importando un XML, tuve un problema... molesto. Aleatoriamente me convertía las "Ñ" en un caracter ilegible "?"... -Encoding UTF8 por todos lados (en get-content, explicitamente en el XML, en [xml]) y al final me di por vencido: lo hice "Old School"...

Lo primero fue obtener el código ASCII del caracter no válido en la cadena:

? "No es un signo de pregunta"... es un caractér no representable:
$cadena = 'FG?'
#Obtener los códigos ASCII 
[int[]][char[]]$cadena
70
71
65533
 
? debería ser una Ñ, que es:
PS C:\> [int][char]"Ñ"
209

Recreando la cadena con el código correcto, recuperamos la Ñ:
 
 
 
el 99% de las veces tenemos que tratar los caracteres con la tabla correspondiente (UTF8, ASCII, etc), pero cuando el tema se pone duro, "las cosas a la vieja usanza" :)

function Reemplazar-Caracter
{
 Param
 (
  [parameter(Mandatory=$true)][string][ValidateNotNullOrEmpty()]$txt,`
  [parameter(Mandatory=$true)][int][ValidateNotNullOrEmpty()]$CarAnt,`
  [parameter(Mandatory=$true)][int][ValidateNotNullOrEmpty()]$CarNuevo
 )
 
 Write-Host -ForegroundColor green $txt 
 Write-Host -ForegroundColor cyan $([int[]][char[]]$txt)
 [string]$txtnuevo = $null
 foreach ($ascii in ([int[]][char[]]$txt))
 {
  if ($ascii -eq $CarAnt)
  {
   $txtnuevo = $txtnuevo + [char]$CarNuevo
  }
  else
  {
   $txtnuevo = $txtnuevo + [char]$ascii
  }
 }
 return $txtnuevo
}
 

No hay comentarios.: