Понимание asp-classic charset и строкового литерального управления в случае включения

Как и следовало ожидать, я имею дело с устаревшим веб-приложением, которое в основном использует Windows-1252 в качестве набора символов.

Я также написал небольшой набор библиотек, в том числе один, содержащий акценты. Эти файлы находятся в кодировке UTF-8 и включены в устаревший код. И вот я здесь :

                .------------.                              .-----------------.
                |   UTF-8    |                              |   Windows-1252  |
                |------------|                              |-----------------|
                | Dim str    | <-------- inclusion -------- | Dim str2        |
                | str = "é"  |                              | str2 = "è"      |
                |____________|                              |_________________|

Похоже, что str2 будет обрабатываться так, как если бы "è" было закодировано как UTF-8, хотя это не так.

Я знаю, что литералы, отличные от ASCII, не должны быть написаны в коде, но это наследие. Более того, я признаю, что мне не очень хочется даунгрейд преобразовывать файлы UTF-8 в Windows-1252. Также я ищу чистый способ сообщить движку правильную кодировку строковых литералов, прежде чем преобразовывать их во внутреннее представление. Response.Codepage не кажется актуальным или работающим. Есть ли другой чистый способ решить эту проблему, не превращая новые файлы в кодировку Windows-1252?


person Amessihel    schedule 01.03.2016    source источник
comment
Честно говоря, я думаю, что смесь — худшее из обоих миров. Если у вас абсолютно нет времени на то, чтобы стиснуть зубы и преобразовать устаревшие файлы в UTF-8, тогда вам, вероятно, следует подумать о сохранении ваших новых файлов как Win 1252.   -  person John    schedule 01.03.2016
comment
Я знал это ... На самом деле я хотел изолировать некоторые файлы Win1252, стремясь преобразовать весь устаревший материал. Спасибо @John за ваш комментарий.   -  person Amessihel    schedule 01.03.2016
comment
Я знаю, что литералы, отличные от ASCII, не должны быть прописаны в коде - А почему?   -  person user692942    schedule 01.03.2016
comment
Вы должны использовать директиву @CodePage = <numeric codepage>, чтобы указать IIS, как обрабатывать файл, и убедиться, что файл ASP сохранен в правильной кодировке, соответствующей директиве. Response.CodePage сообщает ASP, как возвращать ответы, а не обрабатывать их в первую очередь. Некоторые рекомендации здесь   -  person user692942    schedule 01.03.2016
comment
@Lankymart @CodePage нельзя использовать более одного раза.   -  person Amessihel    schedule 01.03.2016
comment
Это должна быть первая строка в файле, которая сообщает IIS, как обрабатывать файл, который вам не нужен, более одного раза. Если затем вы хотите принудительно отправить ответы на разные кодовые страницы, используйте Response.CodePage в сочетании с Response.Write. Помните, что ответ HTTP должен содержать только одну кодовую страницу после отправки ответа клиенту, иначе вы получите несоответствие кодировки по месту. Директива @codepage всегда должна соответствовать физической кодировке файла, поэтому никогда не потребуется больше одного раза, один файл может быть закодирован только одним способом.   -  person user692942    schedule 01.03.2016
comment
@Lankymart На самом деле речь идет не об ответе HTML, а о строковом представлении ... str1 и str2 используются для анализа файла, а не для вывода текста в браузер. Также здесь у нас есть два файла с разной кодировкой. У каждого должен быть свой @codepage, хотя это невозможно. (Извините за неправильное написание вашего никнейма.)   -  person Amessihel    schedule 01.03.2016
comment
Это Март. Независимо от того, отправляете ли вы ответ HTTP или имеете дело с чем-то на сервере, применяются одни и те же правила. Но, учитывая, что вы не предоставляете образец кода, как вы ожидаете, что мы догадаемся о ваших намерениях в отношении файла ASP?   -  person user692942    schedule 01.03.2016
comment
Итак, @Lankymart, если я понимаю: 1/ @Codepage в первой строке включаемого файла, 2/ Response.CodePage в каждом включаемом файле?   -  person Amessihel    schedule 01.03.2016
comment
Притормози, кто сказал что-нибудь о #include файлах?... правила являются родительскими. Файл ASP содержит директиву @codepage, указывающую на ту же кодировку, которая использовалась для сохранения этого физического файла. Включения, указанные в этом файле, должны соответствовать кодировке родителя и директиве @codepage, иначе вы получите несоответствие кодировки. Только родительский файл ASP может содержать директиву @codepage. Может быть полезно Установка кодовой страницы для преобразования строк< /а>   -  person user692942    schedule 01.03.2016
comment
@Lankymart, Включает ссылки в этом файле, которые должны соответствовать кодировке родителя ... ?? Мои вопросы касаются включения несоответствующих файлов кодировки. Я не думаю, что смогу предоставить соответствующий пример кода, более актуальный, чем приведенная выше диаграмма.   -  person Amessihel    schedule 01.03.2016
comment
Извините, что не ясно из вопроса. Ответ заключается в том, что вы всегда будете получать несоответствия кодировок, если вы #include файлы, которые соответствуют кодировке родительского файла ASP, в который вы их включаете. Иногда это неясно, потому что большинство символов ASCII сопоставляются, как для, как для UTF-8, но другие наборы символов, такие как восточноевропейские, вы начнете замечать проблему с некоторыми знаками с акцентом. Теоретически вы можете просто выдумывать это и надеяться, что это сработает, но позже это может привести к большому количеству боли.   -  person user692942    schedule 01.03.2016
comment
@Lankymart, действительно, это то же самое, что и комментарий Джона.   -  person Amessihel    schedule 01.03.2016