Когда я конвертирую varbinary в varchar, добавляются некоторые новые символы. Как исправить? - PullRequest
1 голос
/ 27 апреля 2019

я пытаюсь конвертировать varbinary в varchar

declare @binaryData varbinary(max)
set @binaryData = (select "columnName" from "tableName" where ID = 1)
select convert(varchar(max), @binaryData ) as BinaryData

результат:

ï>>¿<?xml version="1.0" encoding="utf-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"[]>
....
//(XML File(svg))
....

Почему я получаю символы "ï >> ¿"?

1 Ответ

2 голосов
/ 27 апреля 2019

Это UTF-8 Порядок следования байтов , где байты 0xEFBBBF добавляются к файлу для указания кодировки.SQL Server не вводит эти байты;они присутствуют в ваших данных.Чтобы удалить их, вы можете преобразовать столбец в XML, и анализатор XML будет игнорировать их.EG:

declare @doc varbinary(max) = 0xEFBBBF + convert(varbinary(2000),'<?xml version="1.0" encoding="utf-8" standalone="no"?><foo/>' )
select cast(@doc as varchar(max)),  cast(@doc as xml)

выходы

<?xml version="1.0" encoding="utf-8" standalone="no"?><foo/>   <foo />

(1 row affected)
...