Будет быть предназначением IE8 с условной работой комментариев?

Класс Encoding не может иметь дело с этим напрямую, но Decoder , возвращенный из Encoding.GetDecoder() , может (действительно, это вся его причина существования). StreamReader использует Decoder внутри.

Работать с ним немного неудобно, поскольку необходимо заполнить char[], а не возвращать string (Encoding.GetString() и StreamReader обычно обрабатывают бизнес заполнения char[]). [1116 ]

Проблема с использованием MemoryStream заключается в том, что вы копируете все байты из одного массива в другой, без усиления. Если все ваши буферы имеют одинаковую длину, вы можете сделать это:

var decoder = Encoding.UTF8.GetDecoder();
// +1 in case it includes a work-in-progress char from the previous buffer
char[] chars = decoder.GetMaxCharCount(bufferSize) + 1;
foreach (var byteSegment in bytes)
{
    int numChars = decoder.GetChars(byteSegment, 0, byteSegment.Length, chars, 0);
    Debug.WriteLine(new string(chars, 0, numChars));
}

Если буферы имеют разную длину:

var decoder = Encoding.UTF8.GetDecoder();
char[] chars = Array.Empty();
foreach (var byteSegment in bytes)
{
    // +1 in case it includes a work-in-progress char from the previous buffer
    int charsMinSize = decoder.GetMaxCharCount(bufferSize) + 1;
    if (chars.Length < charsMinSize)
        chars = new char[charsMinSize];
    int numChars = decoder.GetChars(byteSegment, 0, byteSegment.Length, chars, 0);
    Debug.WriteLine(new string(chars, 0, numChars));
}

18
задан Devon 3 October 2008 в 16:13
поделиться

7 ответов

Это работало на меня †“В и в режиме причуд и в режиме соответствия стандартов. Однако это делает не работа при переключении на режим эмуляции IE8.

14
ответ дан 30 November 2019 в 07:13
поделиться

Одна вещь отметить:

Это действительно работает, , НО при загрузке локальной сети страницы/сайта (например, Интранет) , она загрузится в [1 116] режим IE7 по умолчанию! (обновление - localhost [*] является особым случаем, это делает рендеринг в режиме стандартов)

, Это идет вразрез с исходным положением MSFT идущих СТАНДАРТОВ по умолчанию.

, например,

http://127.0.0.1/mysite/mypage.php  <-- IE8 by default (updated!)
http://localhost/mysite/mypage.php  <-- IE8 by default (updated!)
http://machinename/mysite/mypage.php  <-- IE7 by default
http://192.168.100.x/mysite/mypage.php  <-- IE7 by default
http://google.com/  <-- IE8 by default

[*] - Scott Dickens [MSFT] отметил в комментарии здесь о Блоге IE, что localhost был специальным сценарием в Интранет (часто раньше разрабатывал сайты), таким образом представит в режиме Standards по умолчанию.

Для тестирования, в чем действительно представляет режим страница в IE8 можно использовать, проверяют инструменты разработчика или используют этот bookmarklet код (только работы в IE8):

javascript:
var vMode=document.documentMode;
var rMode='IE5 Quirks Mode';
if(vMode==8){
  rMode='IE8 Standards Mode';
} else if(vMode==7){
  rMode='IE7 Strict Mode';
}
alert('Rendering in: '+rMode);
22
ответ дан 30 November 2019 в 07:13
поделиться

Настройки представления Tools/Compatability

сняли флажок с ними весь

3
ответ дан 30 November 2019 в 07:13
поделиться

Спасибо за вашу помощь. Я нашел решение, по-видимому, проблема заключалась в том, что каждая таблица стилей использовала свой собственный атрибут заголовка. Как только я убрал заголовки со всех, кроме основной таблицы стилей, без проблем.

Это странная проблема, уникальная для IE8 - и хотя мне сказали, что она должна работать таким образом, что-то связано с «Предпочтением таблицы стилей» - он служит только для создания проблем, поскольку решение требует, чтобы вы удалили заголовок, который может быть полезен при написании сценариев и т. д. - когда вам нужно вызвать таблицу стилей.

В любом случае, не уверен, ошибка ли это или ее должно быть так, но я надеюсь, что Microsoft продолжит расследование.

Спасибо

0
ответ дан 30 November 2019 в 07:13
поделиться

Зачем вообще писать отдельную таблицу стилей для IE8?

Если вы уже отлаживали IE7, вы можете принудительно настроить IE8 в режим совместимости и, таким образом, отображать ваш код, как если бы IE8 был IE7.

Все, что вам нужно сделать, это поместить это ВПРАВО НИЖЕ открывающего тэга. В другом месте, и это не сработает.

И тогда это на полчаса или около того меньше работы на проект, не требуется интенсивная отладка для IE8!

Даже Msn.com делает это - какая-то ирония, а?

Недавно написал об этом сообщение в блоге: http://blog.sankhomallik.com/2009/11/16/stop-wasting-time-debugging-on-ie8-when-you-dont-have- to-or-get-ie8-to-behavior-like-ie7 /

0
ответ дан 30 November 2019 в 07:13
поделиться

IE8 выглядит довольно хорошо по сравнению с IE7, у меня есть таблицы стилей для IE6, IE7 и IE8; сначала я подумал, что условные комментарии не работают для IE8, после небольшого эксперимента я обнаружил, что некоторые правила не применяются IE8 только потому, что мне нужно было сначала поставить предок или родительский класс, например у меня был класс вроде

.niceclass {some: properties; more: properties;}

он работал только , если я изменил его на что-то вроде:

.parentclass .niceclass {some: properties; more: properties;} или

#parentselector .niceclass {some: properties; more: properties;}

кстати, в моем CSS только для IE8 у меня есть только одно правило переопределения, остальное почти отображается как firefox, хотя это не заставляет меня уходить из FF!

0
ответ дан 30 November 2019 в 07:13
поделиться

Со своей стороны я хотел использовать закругленные границы с помощью css. IE8 на Vista такого не поддерживает. А так как графика была такова, что на закругленных границах тоже была красивая закругленная тень, страница в IE8 выглядела ужасно.

Я пытался использовать условные комментарии, но безрезультатно, IE8 не оценивал бы выражение в IE и, таким образом, не включал бы внешнюю таблицу стилей.

Затем я посмотрел, как поместить его в режим причудливости/компатиблиотечности, однако, это все равно не сработало, так как CSS-взломщики, которые я использовал, больше не работали для IE8.

Последнее, но по крайней мере, я нашел работающий CSS-взлом, который корректно отрисовывает страницу, когда она находится в режиме совместимости.

* + html #test[id] { color:lime } 

Сейчас я не знаю, работает ли это для IE7 или ниже, так что у вас было бы, по крайней мере, три различные взломы для каждого релиза IE, которые вы хотите поддерживать, например

* + html #test,
    html+body #test,
    * html body #test
    { color:lime }

Интересно, какая следующая регрессия Internet Exploiter увидит нас.

.
0
ответ дан 30 November 2019 в 07:13
поделиться