(MVC) MVC (2017 год)

Про кодування файлів на web-сервері.

IIS має налаштування, у якій кодіровці він очикує файли у каталогах, де зберігаються web-сайти.



Так само Visual Studio має налаштування, у якій кодіровці вона очікує свої файли проєкта.



Але, нажаль, студія постійно збивається і відображає сторінки у абракадабрі, коли навіть все задано корректно.



Щоб подолати ці проблеми, треба дуже добре порозумітися у кодувані текстових файлів.


По-перше, всі текстові файли мають маркер у перших байтах, у якому кодуванні зроблений цій текстовий файл.



І якщо подивитися на ці файли у бінарному вигляді, то можна побачити ці байти власними очима.



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


Існують багато різноманітних програм з можливістю перекодіровки, з яких особисто мені подобається Notepadd++



Але все це теорія, а як бути на практиці, коли у реальних сайтів існують сотні і тисячі файлів, якийсь файли мають для студії ось такі маркери кодування, а якийсь не мають.

    <meta http-equiv="Content-Language" content="ru">
    <meta http-equiv="Content-Type" content="text/html; charset=Windows-1251">

І до того ж, всі ці маркери конфліктують між собою - Master-Page зроблені у одному кодуванні, власно сторінки - у іншій, все це суперечить і глобальним налаштуванням Visual Studio і глобальним налаштуванням девелоперского Windows і налаштуванням IIS.

Це конкретна і практична ситуація, наприклад у сайті VOTPUSK.RU, бо йому вже більше 15-ти років, зрозуміло що робився він на багатьох машинах, з різними налаштуваннями Encoding (це навіть стосується ASPX-сторінок), а ще є якись сторонні JavaScript's, зроблені індусами у UTF-16, і безліч окремих хеадерів, які взагалі робили інші люди у Visual InteerDev.

Ще гірші справи, якщо файли названі у якомусь іншому кодуванні, наприклад у японському. Найбільш погане працювати, коли ресурси названі у национальному кодуванні - Модіфікація банковського терміналу для Японії.

Як з усім цим впоратися? Якщо навіть у невеличкому cуб-домені VOTPUSK>RU https://arenda.votpusk.ru/default.aspx існує біля 500 файлів?


Я розповім тут про один невеличкий VB-скріптік , який мені допомагає впоратися з цією проблемою. Ось він.


   1:  Function encoding(fpn) 
   2:  set file=CreateObject("ADODB.Stream") 
   3:  file.Type=1
   4:  file.Open 
   5:  file.LoadFromFile fpn 
   6:  data = file.Read 
   7:  file.Close 
   8:  a = hex(Ascb(Midb(data, 1, 1)))
   9:  b = hex(Ascb(Midb(data, 2, 1))) 
  10:  c = hex(Ascb(Midb(data, 3, 1))) 
  11:  d= hex(Ascb(Midb(data, 4, 1)))
  12:  encoding = fpn & " : unknow ascii"
  13:  If a = "EF" AND b = "BB" AND c = "BF" Then encoding = fpn & " : UTF-8" 
  14:  If (a = "FE" AND b = "FF" AND not c = "00" ) then encoding = fpn & " : UTF-16 (BE)"
  15:  If (a = "FF" AND b = "FE") Then encoding = fpn & " : UTF-16 (LE)" 
  16:  If (a = "00" AND b = "00" AND c = "FE" AND d = "FF" ) then encoding = fpn & " : UTF-32 (BE)"
  17:  If (a = "FF" AND b = "FE" AND c = "00" AND d = "00" ) then encoding = fpn & " : UTF-32 (LE)"
  18:  If (a = "2B" AND b = "2F" AND c = "76" AND (d = "38" or d = "39" or d = "2B" or d = "2F" )) then encoding = fpn & " : UTF-7"
  19:  If (a = "F7" AND b = "64" AND c = "4C") then encoding = fpn & " : UTF-1"
  20:  If (a = "DD" AND b = "73" AND c = "66" AND d = "73") then encoding = fpn & " : UTF-EBCDIC"
  21:  If (a = "0E" AND b = "FE" AND c = "FF") then encoding = fpn & " : SCSU"
  22:  If (a = "FB" AND b = "EE" AND c = "28") then encoding = fpn & " : BOCU-1"
  23:  If (a = "84" AND b = "31" AND c = "95" AND d = "33") then encoding = fpn & " : GB-18030"
  24:  End Function 
  25:  wscript.echo encoding(WScript.Arguments.Item(0))

Як ним користуватися? Це можна зробити багатьма шляхами. По-перше зробити наприклад ось такий WSH-файлік, по якому можна просто клацнуть і він викликає цей скриптік з заданим параметром, тобто ім'ям файла, у якому потрібно перевірити кодування.


   1:  [ScriptFile]
   2:  Path=C:\Projects\GetEncoding.vbs C:\Projects\Arenda_5\MyPage.aspx
   3:  [Options]
   4:  Timeout=1
   5:  DisplayLogo=1
   6:  BatchMode=0

Але такий засіб користування не виглядає розумним. Більш розумним виглядає спочатку зробити перелік файлів у каталозі, для якому потрібно зрозуміти кодування кожного файлу.



Після цього я роблю ось такий .BAT-файлік.



І прогоняю його.



Таким чином я отримую ось такий результат.



А далі з цим потрібно щось робити далі, тобто або зводити усі кодування до одного, або прописувати корректне кодування у мастер-пайджі та боді кожного файла. Якщо ресурси названі у национальному кодуванні, то все трохи гірше. Глобально - це лише перший крок до вирішення питання абракадабри, яка буває на сайті.





Comments ( )
Link to this page: //www.vb-net.com/Arenda-Support/index.htm
< THANKS ME>