سؤال

هل يمكنك مساعدتي من فضلك؟في صفحة الويب، أحتاج إلى طباعة هذا:

الفريق 1 ضد الفريق 2

فريق 3 vs فريق 4

الفريق 5 ضد الفريق 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.يحدد الصف الثاني في القائمة القيمة الصحيحة لـ Content-Type بما في ذلك مجموعة محارف UTF-8.العنصر الثالث من القائمة هو نفسه ehtml tuple الذي حددته في بيان مشكلتك أعلاه.

راجع للشغل، يمكنك إنشاء Yaws باستخدام UTF-8 كمجموعة أحرف افتراضية عن طريق تشغيل Yaws configure البرنامج النصي كما هو موضح أدناه:

configure --with-defaultcharset=UTF-8

بعد ذلك، قم بإعادة بناء Yaws باستخدام make كل عادة.إذا قمت بذلك، فإن الصفين لتعيين Content-Type لم تعد هناك حاجة لردك، نظرًا لأن UTF-8 سيكون مجموعة الأحرف الافتراضية لجميع الردود.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top