This is one of those things that PowerShell doesn’t really help you do, but you can do with the underlying .NET framework very easily. What you want is UTF8 encoding without a BOM, and to get that, you use the default constructor of the UTF8Encoding class:
PowerShell’s cmdlets, unfortunately, don’t take an actual Encoding object. Instead, they take an enumerated type that’s meant to be more user friendly (with tab completion and whatnot).
When calling the .NET methods directly, just be careful not to send in any relative paths. The .NET framework’s idea of your “current directory” is different from what PowerShell uses for its PSDrives. Here’s how you can safely translate an arbitrary PSPath into one that’s safe for .NET (even if the path doesn’t already exist):