Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разработка под ASP.NET > Преобразование русских доменов в универсальный вид


Автор: nnm2005 12.1.2011, 14:25
Добрый день!

Как преобразовать (желательно на .NET) русскоязычное название домена в универсальный формат? К примеру, президент.рф в XN--D1ABBGF6AIIY.XN--P1AI ?

Просто класс HttpWebRequest "не хочет" понимать русские домены. Если его как-то можно "научить" - то тоже покатит.

Спасибо.

Автор: azesmcar 12.1.2011, 14:58
http://msdn.microsoft.com/en-us/library/system.uri.aspx
Цитата

To enable support for IRI, the following change is required:

Specify whether you want Internationalized Domain Name (IDN) parsing applied to the domain name and whether IRI parsing rules should be applied. This can be done in the machine.config or in the app.config file. For example, add the following:

Код

<configuration>
  <uri>
  <idn enabled="All" />
  <iriParsing enabled="true" />
  </uri>
</configuration>

Enabling IDN will convert all Unicode labels in a domain name to their Punycode equivalents. Punycode names contain only ASCII characters and always start with the xn-- prefix. The reason for this is to support existing DNS servers on the Internet, since most DNS servers only support ASCII characters (see RFC 3940).
...


Автор: nnm2005 12.1.2011, 18:21
По виду очень похоже, только не работает, windows-сервис падает при старте:

Код

<configuration>

...

    <uri>
        <idn enabled="All" />
        <iriParsing enabled="true" />
    </uri>

</configuration>


Код

System.TypeInitializationException: The type initializer for 'log4net.GlobalContext' threw an exception. ---> 
System.Configuration.ConfigurationErrorsException: Configuration system failed to initialize ---> 
System.Configuration.ConfigurationErrorsException: Unrecognized configuration section uri. 
(d:\projects\Source\trunk\service\bin\Debug\service.exe.Config line 17)
   at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
   at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
   at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
   --- End of inner exception stack trace ---
   at System.Configuration.ConfigurationManager.GetSection(String sectionName)
   at System.Configuration.PrivilegedConfigurationManager.GetSection(String sectionName)
   at System.Net.Configuration.SettingsSectionInternal.get_Section()
   at System.Net.Sockets.Socket.InitializeSockets()
   at System.Net.Dns.GetHostName()
   at log4net.Util.SystemInfo.get_HostName()
   at log4net.GlobalContext..cctor()


Компилируется под 3.5 .Net Framework. Может что еще где надо включить или только в 4-ом работает?

Автор: azesmcar 13.1.2011, 08:09
nnm2005

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

Автор: nnm2005 14.1.2011, 14:39
Короче просто надо .net 4.0 юзать. Кому интересно - читайте тут: http://social.msdn.microsoft.com/Forums/en-US/netfxnetcom/thread/56a73dbb-c0d4-4cad-876d-83ad74064393 .
3.5 не подходит несмотря на то, что в MSDN вроде как написано что должно работать и в 3.5.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)