internal/ConvertTo-UnicodeEscape.ps1

function ConvertTo-UnicodeEscape {
    <#
    .SYNOPSIS
        Escapes non-ascii characters in a given string
    .DESCRIPTION
        Escapes non-ascii characters in a given string
    .EXAMPLE
        PS C:\> 'A Náme' | ConvertTo-UnicodeEscape

        Escapes the `á` to json compliant `\u00E1`
    .EXAMPLE
        PS C:\> $data | ConvertTo-Json -Compress | ConvertTo-UnicodeEscape

        Converts `$data` to json and escapes any non ascii characters
    #>

    [CmdletBinding()]
    Param (
        # String to escape
        [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
        [String]
        $InputObject
    )

    $output = ''

    foreach ($char in $InputObject.GetEnumerator()) {
        $i = [int]$char

        if ($i -lt 128) {
            Write-Debug -Message "$char ($i) does not need escaping."
            $output += $char
        } else {
            Write-Debug -Message "$char ($i) needs escaping."

            $hex = '{0:X}' -f $i
            Write-Debug -Message "Character as hex: $hex"

            $escape = '\u' + $hex.PadLeft(4, '0')
            Write-Debug -Message "Full escape sequence: $escape"

            $output += $escape
        }
    }

    $output
}