문제
도와 줄수있으세요?웹페이지에서 다음을 인쇄해야 합니다.
팀 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를 사용하므로 .yaws 파일 상단에 다음 HTML 주석을 추가했습니다.
<!-- -*- 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
그 후 다음을 사용하여 Yaws를 다시 빌드하십시오. make
평소처럼.이렇게 하면 Content-Type
UTF-8이 모든 응답의 기본 문자 집합이므로 더 이상 응답이 필요하지 않습니다.