2009-12-12 6 views
0

Je pensais que l'option inconnue est utilisée pour la concaténation de fichiers binaires.Quand "Unknown" doit-il être utilisé comme paramètre -Encoding?

http://technet.microsoft.com/en-us/library/dd315299.aspx

Unknown Le type de codage est inconnu ou non valide. Les données peuvent être traitées comme binaire.

Mais {Get-Content binary.dat -Encoding Unknown} que le tableau retourne pas d'octets mais tableau de chaînes.

PS > $a = Get-Content $PSHOME\WTRInstaller.ico -Encoding Unknown 
PS > $b = Get-Content $PSHOME\WTRInstaller.ico -Encoding Byte 

PS > $a[0].GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  String         System.Object 

PS > $b[0].GetType() 

IsPublic IsSerial Name          BaseType 
-------- -------- ----          -------- 
True  True  Byte          System.ValueType 

Même si je convertis $ a en tableau d'octets, il ne coïncide pas avec $ b.

PS > [Text.Encoding]::Unicode.GetBytes($a) 
PS > compare $c[0..10] $b[0..10] 

               InputObject SideIndicator 
               ----------- ------------- 
                 10 => 
                 32 <= 

Quand est-ce que 'Unknown' devrait être utilisé?

+0

jalf, merci pour votre bon montage! – hoge

Répondre

2

Uknown n'est pas fourni, mais plutôt . System.Text.Encoding n'est pas seulement pour une utilisation par powershell. Il y a beaucoup de zones dans la BCL qui acceptent ou retournent les mêmes énumérations. Certaines valeurs sont pour le retour, d'autres pour l'approvisionnement.

-Oisin

+0

Merci Oisin, c'est-à-dire qu'il me semble que je ne devrais pas utiliser Unknown pour quelque chose d'autre pour l'utiliser. – hoge

+0

Ce n'est pas 'System.Text.Encoding', cependant, la valeur utilisée par' Get-Content' est 'Microsoft.PowerShell.Commands.FileSystemCmdletProviderEncoding', qui, je suppose, voit une utilisation plutôt limitée en dehors de PowerShell. – Joey