<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	>
<channel>
	<title>Comments on: Win32.Utf8.</title>
	<atom:link href="http://blog.not-a-kernel-guy.com/2007/08/12/220/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.not-a-kernel-guy.com/2007/08/12/220</link>
	<description>... in the Windows kernel team</description>
	<pubDate>Thu, 08 Jan 2009 13:45:30 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7</generator>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
		<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-11510</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Sat, 24 May 2008 16:45:15 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-11510</guid>
		<description>Если добавляь поддержку кодировок, то её реализация должна быть совместимой с тем как это сделано в posix системах. С примерно теми же настройками, возможностами и т.д. Остальное - грязный хак.</description>
		<content:encoded><![CDATA[<p>Если добавляь поддержку кодировок, то её реализация должна быть совместимой с тем как это сделано в posix системах. С примерно теми же настройками, возможностами и т.д. Остальное - грязный хак.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Иван Левашев a. k. a. OCTAGRAM</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-11509</link>
		<dc:creator>Иван Левашев a. k. a. OCTAGRAM</dc:creator>
		<pubDate>Sat, 24 May 2008 08:10:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-11509</guid>
		<description>&lt;blockquote cite="http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-11506"&gt;Ну насколько я могу судить там не все так тривиально. Чтобы добавить нормальную поддержку UTF-8 там по хорошему нужно реализовать поддержку всех остальных кодировок.&lt;/blockquote&gt;

Да нет, зачем же всех? Вот как раньше ANSI была, так сделать UTF-8 вместо неё.

libiconv здесь зачем? Даже если нужны кодировки, я видел &lt;a href="http://rsdn.ru/Forum/Message.aspx?mid=489745#489745" rel="nofollow"&gt;сопоставление&lt;/a&gt; юниксовых и виндовых кодировок, а там уж виндовыми средствами перекодировку можно доделать. Я не совсем уловил суть проблемы.</description>
		<content:encoded><![CDATA[<blockquote cite="http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-11506"><p>Ну насколько я могу судить там не все так тривиально. Чтобы добавить нормальную поддержку UTF-8 там по хорошему нужно реализовать поддержку всех остальных кодировок.</p></blockquote>
<p>Да нет, зачем же всех? Вот как раньше ANSI была, так сделать UTF-8 вместо неё.</p>
<p>libiconv здесь зачем? Даже если нужны кодировки, я видел <a href="http://rsdn.ru/Forum/Message.aspx?mid=489745#489745" rel="nofollow">сопоставление</a> юниксовых и виндовых кодировок, а там уж виндовыми средствами перекодировку можно доделать. Я не совсем уловил суть проблемы.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-11506</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Fri, 23 May 2008 15:27:48 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-11506</guid>
		<description>Ну насколько я могу судить там не все так тривиально. Чтобы добавить нормальную поддержку UTF-8 там по хорошему нужно реализовать поддержку всех остальных кодировок. Т.е. втащить libiconv и всё что с ним связяно. Можно конечно, написать узкоспециализированный UTF-8 only вариант. Но я бы на месте авторов MinGW такое бы в свой код не пустил бы. 

&lt;blockquote&gt;API POSIX вроде бы не такое необъятное, как WinAPI. Можно примерно представить объём работ. Коль скоро эти работы будут сделаны, MinGW проги станут 100% Юникодными. Мб, придётся чуть допилить, в любом случае, много людей скажут спасибо.&lt;/blockquote&gt;

Умножайте все оценки на 20. :-)</description>
		<content:encoded><![CDATA[<p>Ну насколько я могу судить там не все так тривиально. Чтобы добавить нормальную поддержку UTF-8 там по хорошему нужно реализовать поддержку всех остальных кодировок. Т.е. втащить libiconv и всё что с ним связяно. Можно конечно, написать узкоспециализированный UTF-8 only вариант. Но я бы на месте авторов MinGW такое бы в свой код не пустил бы. </p>
<blockquote><p>API POSIX вроде бы не такое необъятное, как WinAPI. Можно примерно представить объём работ. Коль скоро эти работы будут сделаны, MinGW проги станут 100% Юникодными. Мб, придётся чуть допилить, в любом случае, много людей скажут спасибо.</p></blockquote>
<p>Умножайте все оценки на 20. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Иван Левашев</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-11503</link>
		<dc:creator>Иван Левашев</dc:creator>
		<pubDate>Thu, 22 May 2008 08:08:21 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-11503</guid>
		<description>Возможно, я отвлеку от первоначальной идеи, но есть место, где UTF-8 мог бы пригодиться:

Меня не устраивает текущая реализация MinGW. MinGW — это инструмент портирования юниксовых программ. Все юниксовые программы нормально держат Юникод на настоящих Юниксах, потому что там UTF-8. Под MinGW, однако же, POSIX API принимают ANSI строки. Оправдывается это тем, что, мол, MinGW — это minimalistic в самом названии, а перекодировка из UTF-8 в UTF-16 — это уже не minimalistic. Хотите, мол, полной эмуляции, есть cygwin. Эта позиция меня не устраивает. Хотелось бы увидеть форк MidGW (midimalistic, соответственно), в котором всё в порядке. Просто MinGW — это сейчас единственный способ делать нормальные бинарии под Windows. Cygwin'овские слишком "инопланетные". Вот эмуляция POSIX fork() и ptty меня, к примеру, не интересует, а UTF-8 — да. Если делать UTF-8 в MidGW, то там ещё проблема возникает, библиотека должна различать консольный хендл и неконсольный. На неконсольный нужно выводить UTF-8, а на консольный — преобразовывать его в UTF-16 и выводить через особые функции WinAPI. По–хорошему ещё нужно адекватно реагировать на ANSI.

На этапе инициализации, когда природа stdin, stdout и stderr не ясна, на них нужно попытаться вывести 0 символов, но именно через консольную процедуру вывода. Если это файл, то будет ошибка. Если консоль, то OK.
В других случаях (кроме stdin, stdout, stderr) обычно должно быть понятно сразу, файл открывается или консоль. Ну это так, к слову о том, какие проблемы могут встретиться.

API POSIX вроде бы не такое необъятное, как WinAPI. Можно примерно представить объём работ. Коль скоро эти работы будут сделаны, MinGW проги станут 100% Юникодными. Мб, придётся чуть допилить, в любом случае, много людей скажут спасибо.</description>
		<content:encoded><![CDATA[<p>Возможно, я отвлеку от первоначальной идеи, но есть место, где UTF-8 мог бы пригодиться:</p>
<p>Меня не устраивает текущая реализация MinGW. MinGW — это инструмент портирования юниксовых программ. Все юниксовые программы нормально держат Юникод на настоящих Юниксах, потому что там UTF-8. Под MinGW, однако же, POSIX API принимают ANSI строки. Оправдывается это тем, что, мол, MinGW — это minimalistic в самом названии, а перекодировка из UTF-8 в UTF-16 — это уже не minimalistic. Хотите, мол, полной эмуляции, есть cygwin. Эта позиция меня не устраивает. Хотелось бы увидеть форк MidGW (midimalistic, соответственно), в котором всё в порядке. Просто MinGW — это сейчас единственный способ делать нормальные бинарии под Windows. Cygwin&#8217;овские слишком &#8220;инопланетные&#8221;. Вот эмуляция POSIX fork() и ptty меня, к примеру, не интересует, а UTF-8 — да. Если делать UTF-8 в MidGW, то там ещё проблема возникает, библиотека должна различать консольный хендл и неконсольный. На неконсольный нужно выводить UTF-8, а на консольный — преобразовывать его в UTF-16 и выводить через особые функции WinAPI. По–хорошему ещё нужно адекватно реагировать на ANSI.</p>
<p>На этапе инициализации, когда природа stdin, stdout и stderr не ясна, на них нужно попытаться вывести 0 символов, но именно через консольную процедуру вывода. Если это файл, то будет ошибка. Если консоль, то OK.<br />
В других случаях (кроме stdin, stdout, stderr) обычно должно быть понятно сразу, файл открывается или консоль. Ну это так, к слову о том, какие проблемы могут встретиться.</p>
<p>API POSIX вроде бы не такое необъятное, как WinAPI. Можно примерно представить объём работ. Коль скоро эти работы будут сделаны, MinGW проги станут 100% Юникодными. Мб, придётся чуть допилить, в любом случае, много людей скажут спасибо.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy : Blog Archive : Парсер C кода.</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-8195</link>
		<dc:creator>Not a kernel guy : Blog Archive : Парсер C кода.</dc:creator>
		<pubDate>Thu, 16 Aug 2007 21:37:27 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-8195</guid>
		<description>[...] для C кода – по-прежнему увлекательное занятие. Для Win32.Utf8 мне нужен был парсер для анализа заголовочных файлов [...]</description>
		<content:encoded><![CDATA[<p>[...] для C кода – по-прежнему увлекательное занятие. Для Win32.Utf8 мне нужен был парсер для анализа заголовочных файлов [...]</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-8194</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Wed, 15 Aug 2007 03:40:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-8194</guid>
		<description>&#160;&lt;blockquote&gt;Но что делать с COM интерфейсами?&lt;/blockquote&gt;

Не надо пытаться объять необъятное. :-) Сделаем сначала Win32 API, набъём руку...

Хотя именно с COM интерфейсами особых сложностей может и не случиться. Особенно если есть в наличии IDL или type library. 

&lt;blockquote&gt;ни язык, ни рантайм не позволят их туда вставить.&lt;/blockquote&gt;
&lt;blockquote&gt;В случае COM задачу внедрения Utf-8 API можно решить только замещением содержимого vtbl слотов оригинальных интерфейсов для ANSI функций, например в прокси-стабах, причем тут же появляется проблема с подсовыванием таких стабов, в том числе для COM интерфейсов, которые создаются не стандартным CoCreateInstance, а custom способом, как тот же Direct3D.&lt;/blockquote&gt;

При этом никто не мешает модифицитовать код приложения так, что получаемые объекты будут заворачиваться в proxy. Так что никаких страшных манипуляций с vtbl не требуется.</description>
		<content:encoded><![CDATA[<p>&nbsp;<br />
<blockquote>Но что делать с COM интерфейсами?</p></blockquote>
<p>Не надо пытаться объять необъятное. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Сделаем сначала Win32 API, набъём руку&#8230;</p>
<p>Хотя именно с COM интерфейсами особых сложностей может и не случиться. Особенно если есть в наличии IDL или type library. </p>
<blockquote><p>ни язык, ни рантайм не позволят их туда вставить.</p></blockquote>
<blockquote><p>В случае COM задачу внедрения Utf-8 API можно решить только замещением содержимого vtbl слотов оригинальных интерфейсов для ANSI функций, например в прокси-стабах, причем тут же появляется проблема с подсовыванием таких стабов, в том числе для COM интерфейсов, которые создаются не стандартным CoCreateInstance, а custom способом, как тот же Direct3D.</p></blockquote>
<p>При этом никто не мешает модифицитовать код приложения так, что получаемые объекты будут заворачиваться в proxy. Так что никаких страшных манипуляций с vtbl не требуется.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Eugene Golushkov</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-8193</link>
		<dc:creator>Eugene Golushkov</dc:creator>
		<pubDate>Tue, 14 Aug 2007 19:30:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-8193</guid>
		<description>Итого - примерно 2к-3к функций Win32 API этот слой сможет обработать, хотя я не вполне верю, что SAL декларации получится конвертировать каким-либо способом кроме консервативного, ака "возьмем и умножим длину char буфера на 4 == max(sizeof(any utf8char from first 17 planes))" который сразу потребует в 4 раза больше памяти, чем для ANSI кода, и в 2 раза больше чем для UTF16. А это вызовет каскад предупреждений, правильных и по делу, причем исправить их будет сложнее, чем перейти на TCHAR.

Но что делать с COM интерфейсами? Это значительная часть API. Тот же Direct3D имеет в интерфейсах как XxxA так и XxxW функции плюс макрос для этих целей, но XxxU8 там нет, и ни язык, ни рантайм не позволят их туда вставить.

Недавно я стал программистом под Mac OS X, ее "новый" системный язык, Objective C, имеет интересную особенность. Вызов любого метода там осуществляется динамически. Компилятор преобразует сигнатуру вызываемого метода в селектор, который в рантайме ищется в аналоге vtbl. Этот подход, привнеся накладные расходы, позволил некоторые уникальные вещи - например, чужой класс можно расширить своими методами, которые станут неотличимы от первоначальных. Что-то типа написать новый метод для System.Object, который станет доступен всем, как только будет загружена assembly с его реализацией, возможно динамически. 

В случае COM задачу внедрения Utf-8 API можно решить только замещением содержимого vtbl слотов оригинальных интерфейсов для ANSI функций, например в прокси-стабах, причем тут же появляется проблема с подсовыванием таких стабов, в том числе для COM интерфейсов, которые создаются не стандартным CoCreateInstance, а custom способом, как тот же Direct3D. Безнадега :)</description>
		<content:encoded><![CDATA[<p>Итого - примерно 2к-3к функций Win32 API этот слой сможет обработать, хотя я не вполне верю, что SAL декларации получится конвертировать каким-либо способом кроме консервативного, ака &#8220;возьмем и умножим длину char буфера на 4 == max(sizeof(any utf8char from first 17 planes))&#8221; который сразу потребует в 4 раза больше памяти, чем для ANSI кода, и в 2 раза больше чем для UTF16. А это вызовет каскад предупреждений, правильных и по делу, причем исправить их будет сложнее, чем перейти на TCHAR.</p>
<p>Но что делать с COM интерфейсами? Это значительная часть API. Тот же Direct3D имеет в интерфейсах как XxxA так и XxxW функции плюс макрос для этих целей, но XxxU8 там нет, и ни язык, ни рантайм не позволят их туда вставить.</p>
<p>Недавно я стал программистом под Mac OS X, ее &#8220;новый&#8221; системный язык, Objective C, имеет интересную особенность. Вызов любого метода там осуществляется динамически. Компилятор преобразует сигнатуру вызываемого метода в селектор, который в рантайме ищется в аналоге vtbl. Этот подход, привнеся накладные расходы, позволил некоторые уникальные вещи - например, чужой класс можно расширить своими методами, которые станут неотличимы от первоначальных. Что-то типа написать новый метод для System.Object, который станет доступен всем, как только будет загружена assembly с его реализацией, возможно динамически. </p>
<p>В случае COM задачу внедрения Utf-8 API можно решить только замещением содержимого vtbl слотов оригинальных интерфейсов для ANSI функций, например в прокси-стабах, причем тут же появляется проблема с подсовыванием таких стабов, в том числе для COM интерфейсов, которые создаются не стандартным CoCreateInstance, а custom способом, как тот же Direct3D. Безнадега <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: ch__</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-8192</link>
		<dc:creator>ch__</dc:creator>
		<pubDate>Tue, 14 Aug 2007 18:46:10 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-8192</guid>
		<description>Интересно... Ждем-с.</description>
		<content:encoded><![CDATA[<p>Интересно&#8230; Ждем-с.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Not a kernel guy</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-8191</link>
		<dc:creator>Not a kernel guy</dc:creator>
		<pubDate>Tue, 14 Aug 2007 16:23:30 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-8191</guid>
		<description>&#160;&lt;blockquote&gt;до сих пор не встретил ещё ни одного неинтересного вашего поста :)&lt;/blockquote&gt;

Нивапрос! Исправлюсь. :-)</description>
		<content:encoded><![CDATA[<p>&nbsp;<br />
<blockquote>до сих пор не встретил ещё ни одного неинтересного вашего поста <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></blockquote>
<p>Нивапрос! Исправлюсь. <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexey</title>
		<link>http://blog.not-a-kernel-guy.com/2007/08/12/220/comment-page-1#comment-8190</link>
		<dc:creator>Alexey</dc:creator>
		<pubDate>Mon, 13 Aug 2007 20:25:51 +0000</pubDate>
		<guid isPermaLink="false">http://blog.not-a-kernel-guy.com/2007/08/12/220#comment-8190</guid>
		<description>до сих пор не встретил  ещё ни одного неинтересного вашего поста :)
&#62;О ходе работ и своих находках буду делиться в блоге
ждёмс :)</description>
		<content:encoded><![CDATA[<p>до сих пор не встретил  ещё ни одного неинтересного вашего поста <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
&gt;О ходе работ и своих находках буду делиться в блоге<br />
ждёмс <img src='http://blog.not-a-kernel-guy.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
</channel>
</rss>
