質問
助けてもらえますか?Web ページで、これを印刷する必要があります。
チーム 1 対 チーム 2
チーム3 vs チーム4
チーム5 vs チーム6
チーム7 vs チーム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 ページに適用するヘッダー。リストの 2 番目のタプルは、次の正しい値を指定します。 Content-Type
UTF-8 文字セットを含む。リストの 3 番目の要素は同じです ehtml
上記の問題ステートメントで指定したタプル。
ところで、Yaws を実行すると、デフォルトの文字セットとして UTF-8 を使用して Yaws を構築できます。 configure
以下に示すようなスクリプト:
configure --with-defaultcharset=UTF-8
その後、Yaws を再構築します。 make
いつものように。これを行うと、設定するための 2 つのタプルが Content-Type
UTF-8 がすべての返信のデフォルトの文字セットになるため、返信の一部は必要なくなりました。