Вопрос

Не могли бы вы мне помочь, пожалуйста?На веб-странице мне нужно распечатать это:

команда 1 против команды 2

команда 3 против команды 4

команда 5 против команды 6

команда 7 против команды 8

Мой код:

<erl>
first_team_write(Head) ->
  {ehtml,
    %[{text,[], f("~p vs ", [Head])}]}.        % try
    [{p,[], [Val, " vs "]} || Val <- [Head]]}. % different
second_team_write(Head) ->
  {ehtml,
    %[{text,[], f("~p", Head)},                % ways
    [{p,[], [Head]},                           %
    {p,[], []}]}.

write_teams([], Num) ->
  Num;

write_teams([Head|Tail], Num) ->
if
  (Num rem 2) /= 0 ->
    first_team_write([Head]),
    io:format("~p vs ", [Head]),  %% debug
    write_teams(Tail, Num+1);
  (Num rem 2) == 0 ->
    second_team_write(Head),
    io:format("~p~n", [Head]),  %% debug
    write_teams(Tail, Num+1)
end.


out(A) ->
  application:start(odbc), 
  ConnString = 
  %"Driver={MySQL ODBC 5.2 ANSI Driver};" ++
  "Driver={MySQL ODBC 5.2 Unicode Driver};" ++
  "Server=127.0.0.1;Database=erandom;" ++ 
      "User=root;Password=1q2w3e;" ++ 
      "Option=3;" ++
      "CharSet=utf8;",
      {ok, Conn} = odbc:connect(ConnString, []), 
      % Cyrillic results
      Results = odbc:sql_query(Conn, "select team_name from teams where id in (select team_id from leagues where league_name = 'First League')"), 
      %{selected, [Selector], Results} = odbc:sql_query(Conn, "select team_name from teams where team_name in ('Sporting', 'Old School')"),
      %{selected, [Selector], Results} = odbc:sql_query(Conn, "select team_name from teams where id in (select team_id from leagues where league_name = 'First League')"),
      odbc:disconnect(Conn),
      application:stop(odbc),
      TeamList = element(3, Results),
      {ehtml,
        [{h4,[], "Пары этого тура:"},
        {hr},
          write_teams(TeamList,1)
      ]}.

</erl>

Результат:Моя веб-страница пуста.Что я делаю не так?Я вижу в консоли отладки:

1>
=INFO REPORT==== 25-Feb-2014::23:08:27 ===
    application: odbc
    exited: stopped
type: temporary
1> {[208,159,209,128,208,190,208,188,208,181,209,130,208,181,208,185]} vs 1> {[208,161,208,145,208,162]}
1> {[208,158,208,187,208,184,208,188,208,191]} vs 1> {[208,159,209,128,208,190,208,179,209,128,208,181,209,129,209,129]}
1> {[208,164,208,154,32,208,148,209,142,208,182,208,184,208,189,208,176]} vs 1> {"Old school"}
1> {[208,161,208,191,208,176,209,128,209,130,208,176,208,186]} vs 1> {[208,160,208,190,209,130,208,190,209,128]}
1> {"Sporting"} vs 1> {[208,161,208,190,208,191,209,128,208,190,209,130,208,184,208,178,208,187,208,  181,208,189,208,184,208,181]}
Это было полезно?

Решение

Я полагаю, вы неправильно указали кодировку в своем HTTP-ответе.Во-первых, поскольку в вашу страницу встроен текст на кириллице .yaws, убедитесь, что ваш редактор сохраняет его как UTF-8.Как вы это сделаете, зависит от вашей среды разработки и редактора, но я использую emacs, поэтому я просто добавил следующий HTML-комментарий в начало файла .yaws:

<!-- -*- coding: utf-8 -*- -->

Следующая проблема заключается в том, чтобы правильно задать кодировку в HTTP-заголовках ответа.Чтобы сделать это, установите Content-Type соответствующий заголовок в вашем ответе выглядит следующим образом:

[{header, {content_type, erase}},
 {header, {content_type, "text/html; charset=UTF-8"}},
 {ehtml,
  [{h4,[], "Пары этого тура:"},
   {hr},
      write_teams(TeamList,1)
  ]}].

Обратите внимание, что весь возвращаемый тип представляет собой список Erlang.Первый кортеж в списке удаляет значение по умолчанию Content-Type заголовок, к которому Yaws применяется по умолчанию.страницы yaws.Второй кортеж в списке указывает правильное значение для Content-Type включая кодировку UTF-8.Третий элемент списка тот же самый ehtml кортеж, который вы указали в своей постановке задачи выше.

Кстати, вы можете создать Yaws с UTF-8 в качестве кодировки по умолчанию, запустив Yaws configure сценарий, как показано ниже:

configure --with-defaultcharset=UTF-8

После этого восстановите фрамбовку с помощью make как обычно.Если вы сделаете это, то два кортежа для установки Content-Type части вашего ответа больше не нужны, поскольку кодировка UTF-8 будет использоваться по умолчанию для всех ответов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top