How to convert pipeline to CSV format and specify UTF-8 encoding

powershell, powershell-2.0, powershell-ise

Solution

Add this to the end of your pipeline:

| Export-Csv -Encoding UTF8

It's that simple.

The -Encoding parameter is available for any cmdlet that outputs to a file--Out-File, Set-Content, Add-Content, Export-Clixml, probably some others I'm not thinking of. One gotcha to watch out for is that for UTF16, you need to specify `Unicode` instead of `UTF16` (I think the latter makes more sense, and should at least be available as a synonym, but apparently Microsoft doesn't). The full list of options is:

Unicode,UTF7,UTF8,ASCII,UTF32,BigEndianUnicode,Default,OEM

A couple of notes:

- `ASCII` technically doesn't give you ASCII encoding, it gives you Windows codepage 1252 (which is based on extended ASCII and often informally referred to as ASCII).

- `Default` gives you whichever of the other options is the system default. You can find out what the default is with `[System.Text.Encoding]::Default`.

Problem

In a Windows PowerShell script, I want to execute code which converts a pipeline to CSV format, and encoding should be in UTF-8. How can I do this?

Original source