{"id":9121,"date":"2006-12-11T18:26:00","date_gmt":"2006-12-11T18:26:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/powershell\/2006\/12\/11\/outputencoding-to-the-rescue\/"},"modified":"2019-02-18T13:21:04","modified_gmt":"2019-02-18T20:21:04","slug":"outputencoding-to-the-rescue","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/powershell\/outputencoding-to-the-rescue\/","title":{"rendered":"$OutputEncoding to the rescue"},"content":{"rendered":"<p class=\"MsoNormal\"><span>You might have noticed that \u201cfindstr\u201d does not work properly with non-English text in PowerShell.<\/span><\/p>\n<p class=\"MsoNormal\"><span>For example:<\/span><\/p>\n<p class=\"MsoNormal\"><span>Let\u2019s create a text file with some Chinese characters in it.<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; ${c:\\test.txt}=&#8221;<\/span><span lang=\"JA\">\u4e2d\u6587<\/span><span>&#8220;<\/span><\/p>\n<p class=\"MsoNormal\"><span>Try to use findstr to find&nbsp; one of the Chinese characters, and it did not find anything.<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; Get-Content test.txt | findstr \/c:<\/span><span lang=\"JA\">\u4e2d<\/span><span><\/span><\/p>\n<p class=\"MsoNormal\"><span>The same command works in Cmd.exe.<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; cmd \/c &#8220;findstr \/c:<\/span><span lang=\"JA\">\u4e2d<\/span><span> test.txt&#8221;<\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"JA\">\u4e2d\u6587<\/span><span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>What went wrong? When we pipe output data from PowerShell cmdlets into native applications, the output encoding from PowerShell cmdlets is controlled by the $OutputEncoding variable, which is by default set to ASCII. We can fix the afore-mentioned scenario by changing $OutputEncoding to [Console]::OutputEncoding.<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; $OutputEncoding<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsSingleByte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>BodyName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : us-ascii<\/span><\/p>\n<p class=\"MsoNormal\"><span>EncodingName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : US-ASCII<\/span><\/p>\n<p class=\"MsoNormal\"><span>HeaderName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : us-ascii<\/span><\/p>\n<p class=\"MsoNormal\"><span>WebName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : us-ascii<\/span><\/p>\n<p class=\"MsoNormal\"><span>WindowsCodePage&nbsp;&nbsp; : 1252<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsBrowserDisplay&nbsp; : False<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsBrowserSave&nbsp;&nbsp;&nbsp;&nbsp; : False<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsMailNewsDisplay : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsMailNewsSave&nbsp;&nbsp;&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>EncoderFallback&nbsp;&nbsp; : System.Text.EncoderReplacementFallback<\/span><\/p>\n<p class=\"MsoNormal\"><span>DecoderFallback&nbsp;&nbsp; : System.Text.DecoderReplacementFallback<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsReadOnly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>CodePage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 20127<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; $OutputEncoding = [Console]::OutputEncoding<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; $OutputEncoding<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>BodyName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : gb2312<\/span><\/p>\n<p class=\"MsoNormal\"><span>EncodingName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : <\/span><span lang=\"JA\">\u7b80<\/span><span lang=\"JA\">\u4f53\u4e2d\u6587<\/span><span>(GB2312)<\/span><\/p>\n<p class=\"MsoNormal\"><span>HeaderName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : gb2312<\/span><\/p>\n<p class=\"MsoNormal\"><span>WebName&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : gb2312<\/span><\/p>\n<p class=\"MsoNormal\"><span>WindowsCodePage&nbsp;&nbsp; : 936<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsBrowserDisplay&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsBrowserSave&nbsp;&nbsp;&nbsp;&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsMailNewsDisplay : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsMailNewsSave&nbsp;&nbsp;&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsSingleByte&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : False<\/span><\/p>\n<p class=\"MsoNormal\"><span>EncoderFallback&nbsp;&nbsp; : System.Text.InternalEncoderBestFitFallback<\/span><\/p>\n<p class=\"MsoNormal\"><span>DecoderFallback&nbsp;&nbsp; : System.Text.InternalDecoderBestFitFallback<\/span><\/p>\n<p class=\"MsoNormal\"><span>IsReadOnly&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : True<\/span><\/p>\n<p class=\"MsoNormal\"><span>CodePage&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : 936<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>PS C:\\&gt; Get-Content test.txt | findstr \/c:<\/span><span lang=\"JA\">\u4e2d<\/span><span><\/span><\/p>\n<p class=\"MsoNormal\"><span lang=\"JA\">\u4e2d\u6587<\/span><span><\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>Voila! Now findstr works!<\/span><\/p>\n<p class=\"MsoNormal\"><span><\/span>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span>Wei Wu [MSFT]<\/span><\/p>\n<p class=\"MsoNormal\"><span><\/span>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span><\/span>&nbsp;<\/p>\n<p class=\"MsoNormal\"><span><\/span>&nbsp;<\/p>\n<blockquote>\n<p class=\"MsoNormal\"><span>POSTSCRIPT:&nbsp; The reason we convert to ASCII when piping to existing executables is that most commands today do not process UNICODE correctly.&nbsp; Some do, most don&#8217;t.&nbsp; <\/span><\/p>\n<p class=\"MsoNormal\"><span>&nbsp;<\/span><\/p>\n<p class=\"MsoNormal\"><span>Jeffrey Snover<\/span><\/p>\n<\/blockquote>\n","protected":false},"excerpt":{"rendered":"<p>You might have noticed that \u201cfindstr\u201d does not work properly with non-English text in PowerShell. For example: Let\u2019s create a text file with some Chinese characters in it. PS C:\\&gt; ${c:\\test.txt}=&#8221;\u4e2d\u6587&#8220; Try to use findstr to find&nbsp; one of the Chinese characters, and it did not find anything. PS C:\\&gt; Get-Content test.txt | findstr \/c:\u4e2d [&hellip;]<\/p>\n","protected":false},"author":600,"featured_media":13641,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9121","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-powershell"],"acf":[],"blog_post_summary":"<p>You might have noticed that \u201cfindstr\u201d does not work properly with non-English text in PowerShell. For example: Let\u2019s create a text file with some Chinese characters in it. PS C:\\&gt; ${c:\\test.txt}=&#8221;\u4e2d\u6587&#8220; Try to use findstr to find&nbsp; one of the Chinese characters, and it did not find anything. PS C:\\&gt; Get-Content test.txt | findstr \/c:\u4e2d [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/9121","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/users\/600"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/comments?post=9121"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/posts\/9121\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media\/13641"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/media?parent=9121"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/categories?post=9121"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/powershell\/wp-json\/wp\/v2\/tags?post=9121"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}