Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: си строки в delphi  [new]
s62
Member

Откуда: Жуковский
Сообщений: 1026
Foxpc,

Не знаю. Я вообще написал сначала про понятия юникод и UTF-8, потому что показалось, что ты как-то их используешь не в общепринятом смысле. А вникать в детали задачи неохота, суббота впридачу. :)
23 мар 19, 15:45    [21841703]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
ziv-2014
Member

Откуда:
Сообщений: 469
Foxpc
s62,

А чем Utf8ToUnicodeString отличается от TEncoding.UTF8.GetString ?

Используй второй вариант.
23 мар 19, 16:16    [21841706]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
asviridenkov
Member

Откуда:
Сообщений: 3955
Foxpc
Так что смысла особого вообще нет в TEncoding


Смысл в том, что это универсальный централизованный способ перекодирования.
23 мар 19, 18:03    [21841734]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Foxpc
Member

Откуда:
Сообщений: 162
asviridenkov,

Бред. Они одинаковые. Одна и та же функция вызывается - MultiByteToWideChar

Никакой универсальности нету, кроме того что сам класс поддерживает разный сборник кодировок.
23 мар 19, 22:40    [21841799]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3420
Foxpc,
особенно интересно будет MultiByteToWideChar увидеть не на windows.
23 мар 19, 23:59    [21841822]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Foxpc
Member

Откуда:
Сообщений: 162
makhaon,

штука и не пишется не для винды
24 мар 19, 00:47    [21841829]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2220
Foxpc
штука и не пишется не для винды
"Такое впечатление, что вы бредите" (с) Вроде русским языком всё объяснили...
24 мар 19, 11:56    [21841951]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Foxpc
Member

Откуда:
Сообщений: 162
white_nigger,

Да в прочем опять же бреееееед. Даже если я захочу скомпилировать под другую систему Линкус или андройда.

Компилятор сразу подхватит другую реализацию этой же функции. Так что какать хотел на это, и на вашу псевдо универсальность (Которой нет)
24 мар 19, 15:54    [21842142]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Arioch
Member

Откуда:
Сообщений: 11075
Foxpc
TEncoding.UTF8.GetString


TEncoding - это та ещё весёлая зараза. Я понимаю желания копипастить C# ен включая мозга, но не в RTL же!

кстати, попробуй ей скормить испорченную UTF-8 строку

например вырежи из неё один байт наугад.

или проще всего

var u8s : AnsiString = 'start is correct UTF-8 bytestream for a while но потом внезапно a small non-Unicode piece';
     u16s: string;
     b: TByteStresm;

b.WriteBuffer(s[1], Length(s)+1);
u16s := TEncoding.UTF8.GetString(b.Bytes); 


угадай, что будет в u16s (и вообще, дойдёт ли программа до этой строчки)

потом сравни с другими вариантами конвертирования этой намеренно подпорченной строки, начиная с MultiByteToWideChar, древним UTF8Decode и т.д.
26 мар 19, 12:17    [21843585]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Arioch,


у меня были проблемы, что отладчик видит значения. А вывести в консоль не может. И условие str = nil давала true

Я так и не понял причину, просто переписал код как было
26 мар 19, 13:53    [21843738]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1615
Arioch
кстати, попробуй ей скормить испорченную UTF-8 строку

например вырежи из неё один байт наугад.

потом сравни с другими вариантами конвертирования этой намеренно подпорченной строки, начиная с MultiByteToWideChar, древним UTF8Decode и т.д.


То что что-то неявно решало проблемы, и вдруг перестало решать - не означает что работало верно.
Если скормили кривую строку - то и должны получить кривой результат.
Передай нормальную строку - получишь нормальный результат.
Все логично.
26 мар 19, 13:59    [21843749]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Foxpc
Member

Откуда:
Сообщений: 162
X-Cite,

UTF8String(PAnsiChar(PUTF8String)) даже бинарные строки, и обычные жуёт верно
26 мар 19, 14:10    [21843771]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Arioch
Member

Откуда:
Сообщений: 11075
прекрасная логика.

По ней код
x := 1; y := 0; z := x / y; 
может выдавать всё, что хочется. Например random. Или 42.

Кажется то ли в PHP то ли в MySQL 3 такой код выдавал 0 как результат.

Ну а чего, все же логично, скормили кривые числа - получили кривой результат, всё как надо.
26 мар 19, 14:12    [21843774]     Ответить | Цитировать Сообщить модератору
 Re: си строки в delphi  [new]
Foxpc
Member

Откуда:
Сообщений: 162
Arioch,

не, php выдаст INF точно говорю. + предупреждения
26 мар 19, 14:20    [21843787]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Delphi Ответить