konto usunięte

Temat: UTF-16 to UTF-8


Posiada ktos algortym/funkcje etc konwertujaca utf-16 do utf8 ?

Kamil N.

Kamil N. Expert of Microsoft
SQL Server, Business
Intelligence & D...

Temat: UTF-16 to UTF-8

w T-SQL funkcjonują bardziej pojęcia np. NVARCHAR i VARCHAR.
Potrzebujesz tego w T-SQL czy C#? :)

konto usunięte

Temat: UTF-16 to UTF-8


http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=62406

potrzebuję owa funkcję tylko w drugą stronę i koniecznie w t-sql;)

Temat: UTF-16 to UTF-8

Można napisać, skomplikowanie zależy od tego, co jest źródłem danych. Dla kodowania samych polskich liter wystarczy replace. Przy pełnej obsłudze funkcja powinna obsługiwać "surrogate pairs". Założenie, że każdy znak na wejściu jest tylko na 2 bajtach, dużo ułatwia. Wtedy przykładowo z http://www.herongyang.com/Unicode/UTF-8-UTF-8-Encoding... wystarczy przepisać do tsql samo:

if (c<0x80)
b1 = c>>0 & 0x7F | 0x00
b2 = null
b3 = null
b4 = null
else if (c<0x0800)
b1 = c>>6 & 0x1F | 0xC0
b2 = c>>0 & 0x3F | 0x80
b3 = null
b4 = null
else if (c<0x010000)
b1 = c>>12 & 0x0F | 0xE0
b2 = c>>6 & 0x3F | 0x80
b3 = c>>0 & 0x3F | 0x80
b4 = null

Jeśli musi być pełna obsługa trzeba użyć wszystkich 4 warunków i dodać rozpoznawanie "surrogate pairs", BOM, BE, LE.Leszek Gniadkowski edytował(a) ten post dnia 02.02.13 o godzinie 08:32

konto usunięte

Temat: UTF-16 to UTF-8


dzięki. do excela, generowanego za pomocą XSLT(kodowanego w UTF-8) próbuję wrzucić zarówno polskie znaczki jaki i cyrlice. Na arkusz otrzymuję np 'Банковский перевод łźź óó ęęę' przekazując z sql poprawny zapis w cyrlicy.

Wywołanie funkcji którą przytoczyłem np. select dbo.utf8_to_utf16a('Банковский перевод łźź óó ęęę') zwróci poprawny zapis w cyrlicy. Potrzebuje zatem przekonwertować w drugą stronę tj. poprawny zapis w cyrlicy na 'БанковскР;)

Temat: UTF-16 to UTF-8

na szybko konwersja z nvarchar do utf8, z obsługą cyrilicy powinna sobie poradzić, brak obsługi bom, zakłada le, brak obsługi "supplementary characters", ale może w tym wypadku wystarczy

create function dbo.nvarchar_to_utf8 (@s nvarchar(4000)) returns varchar(8000)
begin
if @s is null return null
declare @n int, @r varchar(8000),@ch nchar(1), @c int
set @r = ''
set @n = 1
while @n < len(@s + 'a')begin
set @ch = substring(@s,@n,1)
set @c = cast(cast(@ch as binary(2)) as int)
set @c = (@c % 0x100) * 0x100 + @c / 0x100 -- zmiana le na be
-- zamiast dwóch wierszy wyżej można użyć set @c = unicode(@c), ale lepiej doczytać zachowanie przy ustawionym sc collation - http://msdn.microsoft.com/en-us/library/ms143726.aspx
set @r = @r + case when @c < 0x80 then cast(char(@c) as varchar)
when @c < 0x0800 then char(@c / 64 & 0x1F | 0xC0) + char(@c & 0x3F | 0x80)
else char(@c/4096 & 0x0F | 0xE0) + char(@c / 64 & 0x3F | 0x80) + char(@c & 0x3F | 0x80) end
set @n = @n + 1
end
return @r
endLeszek Gniadkowski edytował(a) ten post dnia 02.02.13 o godzinie 09:46

konto usunięte

Temat: UTF-16 to UTF-8


serdeczne dzięki ! funkcją powinna rozwiązać problem - jutro jednak zweryfikuję ;)

konto usunięte

Temat: UTF-16 to UTF-8


dzięki działa !

Temat: UTF-16 to UTF-8

przeedytowałem jeszcze posty i dodałem warunek dla @c >= 0x0800, ten zakres też się jeszcze mieści w 2 bajtach

konto usunięte

Temat: UTF-16 to UTF-8

Leszek Gniadkowski:
przeedytowałem jeszcze posty i dodałem warunek dla @c >= 0x0800, ten zakres też się jeszcze mieści w 2 bajtach



dzięki wielkie:) poprzednia wersja jednak działa wyśmienicie ;)

Temat: UTF-16 to UTF-8

jakby ktoś potrzebował do kanji ;)
http://pastebin.com/0BCAQ7b8



Wyślij zaproszenie do