Skip to content

The Encoding parameter of Import-Ini and Export-Ini behaves inconsistently. #146

@Mapaler

Description

@Mapaler

In a Chinese environment, the default UTF-8 encoding causes all ANSI (GBK) encoded Chinese characters to be read incorrectly. Therefore, my Import-Ini needs to add the -Encoding ([System.Text.Encoding]::Default) parameter.
However, when I need to output, I found that the Export-Ini -Encoding ([System.Text.Encoding]::Unicode) parameter actually causes an error and needs to be changed to -Encoding unicode.

PSIni Version: 4.0.1

 Mapaler  $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.19041.7058
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.19041.7058
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

Import-Ini

❌ -Encoding ansi
 Mapaler  Import-Ini "C:\ProgramFree\TotalCMD64\User\User.ini" -Encoding ansi
Import-Ini : 无法处理对参数“Encoding”的参数转换。无法将“System.String”类型的“ansi”值转换为“System.Text.Encoding
”类型。
所在位置 行:1 字符: 64
+ Import-Ini "C:\ProgramFree\TotalCMD64\User\User.ini" -Encoding ansi
+                                                                ~~~~
    + CategoryInfo          : InvalidData: (:) [Import-Ini],ParameterBindingArgumentTransformationException
    + FullyQualifiedErrorId : ParameterArgumentTransformationError,Import-Ini

✅ -Encoding ([System.Text.Encoding]::Default)
 Mapaler  Import-Ini "C:\ProgramFree\TotalCMD64\User\User.ini" -Encoding ([System.Text.Encoding]::Default)

Name                           Value
----                           -----
Associations                   {Filter1, Filter1_open, Filter1.icon, Filter2...}
user                           {menu1, cmd1, param1, menu2...}
DirMenu                        {menu1, cmd1, menu2, cmd2...}

Export-Ini

✅ -Encoding unicode
 Mapaler  Export-Ini -InputObject $sourceData -Path "C:\ProgramFree\TotalCMD64\User\User.new.ini" -Encoding unicode   

❌ -Encoding ([System.Text.Encoding]::Unicode)
 Mapaler  Export-Ini -InputObject $sourceData -Path "C:\ProgramFree\TotalCMD64\User\User.new.ini" -Encoding ([System.Text.Encoding]::Unicode)
Export-Ini : Cannot validate argument on parameter 'Encoding'. The argument "System.Text.UnicodeEncoding" does not belo
ng to the set "unknown, string, unicode, bigendianunicode, utf8, utf7, utf32, ascii, default, oem" specified by the Val
idateSet attribute. Supply an argument that is in the set and then try the command again.
所在位置 行:1 字符: 1
+ Export-Ini -InputObject $sourceData -Path "C:\ProgramFree\TotalCMD64\ ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : InvalidType: (System.Text.UnicodeEncoding:String) [Export-Ini], ArgumentException
    + FullyQualifiedErrorId : InvalidEncoding,Export-Ini

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions