Buscar

PowerShell: Acentos, diéresis (caracteres locales)

En este post, hablaremos sobre cómo lidiar con caracteres locales con PowerShell. 

Es muy frecuente que desde una aplicación corporativa se exporten elementos por ejemplo a un fichero .csv, .xml, .json… para luego ser importados mediante PowerShell. En este artículo aplicaremos algunos métodos para poder usar estos datos en bruto con total seguridad.

Vamos a suponer que nos han facilitado un UsuariosRandom.csv en el que constan los datos que luego queremos añadir al directorio activo.

PowerShell: Acentos, diéresis y otros caracteres locales.

Si los importáramos directamente a AD nos aparecerían campos con símbolos extraños.

Import-Csv -Path .\UsuariosRandom.csv -Delimiter ';'

Resultado:

PowerShell: Acentos, diéresis y otros caracteres locales.

Una de las formas más rápidas para poder importar correctamente los datos sería usar el parámtero -Encoding del cmdlet Import-CSV:

Import-Csv -Path .\UsuariosRandom.csv -Encoding utf7 -Delimiter ';'

Resultado:

PowerShell: Acentos, diéresis y otros caracteres locales.

Con este primer paso solucionaríamos el problema de los caracteres no reconocidos y podríamos visualizarlos o importarlos sin incidencias.

Sustitución de letras con acentos y especiales (á,à,ü,ç,ñ…).

Hay situaciones en las que sencillamente no podemos usar caracteres especiales: Por ejemplo al generar nombres de usuario, direcciones de correo electrónico etc.

Una solución para estas situaciones es sustituir los caracteres con acentos, diéresis etc por caracteres planos.

PowerShell: Acentos, diéresis y otros caracteres locales.

$Nombre = 'Petroña Navaes Regüilón'
$NombreLimpio = [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding('Cyrillic').GetBytes($Nombre))
Write-Host "Nombre: `'$Nombre`'"
Write-Host "NombreLimpio: `'$NombreLimpio`'"

Resultado:

PowerShell: Acentos, diéresis y otros caracteres locales.

En este caso nos ha sustituido:

ñ -> n
ü -> u
ó -> o

Mediante este comando aprendimos a limpiar los caracteres de una sola variable.

Limpiar todo el archivo .csv de caracteres locales

Si necesitamos limpiar todo el fichero .csv de caracteres locales (acentos, diéresis…) lo podemos hacer mediante un foreach-object:

PowerShell: Acentos, diéresis y otros caracteres locales.

Get-Content .\UsuariosRandom.csv -Encoding utf7 |
    ForEach-Object {
        [Text.Encoding]::ASCII.GetString([Text.Encoding]::GetEncoding('Cyrillic').GetBytes($_))
    } | Set-Content .\UsuariosRandomLimpio.csv

Resultado:

PowerShell: Acentos, diéresis y otros caracteres locales.

Aplicando este método nos despreocuparíamos de los caracteres locales y acentos.


No hay comentarios:

Publicar un comentario