Ответ Рукака напомнил мне, что я действительно решил эту проблему.Он в основном прав, но проблема не имеет ничего общего с веб-браузером, поэтому я подумал, что предоставлю именно то, что сделал, чтобы все исправить.
Насколько я могу судить, QuickBooks фактически хранит и выводит свои данныеиспользуя windows-1252 (это кодировка, используемая при экспорте в текстовый файл из QB).Но когда данные читаются через API на основе SDK, где-то вдоль строки коды Windows-1252 неправильно интерпретируются как Unicode (либо с помощью QB SDK, стороннего API или самой .NET Framework; у меня нет никакого способазная).
Это работает большую часть времени, потому что коды символов от 0 до 127 (включая все буквы в английском алфавите) одинаковы между двумя кодировками.Но начиная с 128, две схемы расходятся, поэтому 150 в windows-1252 означает «en-dash», а в Unicode - «Начало охраняемой области».
Чтобы исправить это, я использовал следующий код:
Dim Builder As New Text.StringBuilder(Input)
For i = 0 To Builder.Length - 1
Dim n = AscW(Builder(i))
If n > 127 AndAlso n < 256 Then
Dim b As Byte = n
Builder(i) = System.Text.Encoding.Default.GetChars({b})(0)
End If
Next
Return Builder.ToString
Получает код символа для каждого символа (используя AscW
) и, если код находится в диапазоне от 127 до 256 (исключительно) (255 является последним символом в windows-1252), правильно его интерпретируетиспользуя кодировку windows-1252, а затем должным образом преобразует ее в Unicode.