zoukankan      html  css  js  c++  java
  • [转]解决中文操作系统下编译XBMC的问题

    在中文操作系统下编译XBMC会出现一些问题,有一些因为代码页问题造成的warning和error,
    由于开发团队一般是在英文系统下编译的,所以源代码文件默认都是英文代码页来解析的,
    一般情况下都没有问题,但对于某些显式写出来的英文代码页下的非ASCII字符,到中文环境
    下编译就出问题了,中文代码页会把这些字符以中文的编码去解读,有些和C语言字符串定界符
    双引号"在中文代码页下错误的合并解析导致编译语法错误,如果把这些源文件另存为utf8或者
    unicode也是不行的,因为要转换的字符串里本身必须要求是英文代码页的编码,所以强制另存
    utf8或者unicode的话,就会导致错误的乱码执行结果,比如看到的就是天气里的℃是乱码。
    一个简单的解决办法就是把操作系统的默认区域设为英文来编译,但这样觉得不是很方便。
    还有一个办法就是把那些必须英文代码页下的源文件中的非ASCII字符串用C语言中的转义
    字符串代替皆可,这样就和代码页没关系了,比如把 "℃" 写成 "\xB0\x43" 即可。
    我分析了一下,会导致编译错误的文件如下:
    /guilib/LocalizeStrings.cpp
    大约在Line128,修改如下:

    // fill in the constant strings
    m_strings[20022] = "";
    m_strings[20027] = ToUTF8(encoding, "°F");   改成    m_strings[20027] = ToUTF8(encoding, "\xB0\x46");
    m_strings[20028] = ToUTF8(encoding, "K");
    m_strings[20029] = ToUTF8(encoding, "°C");   改成    m_strings[20029] = ToUTF8(encoding, "\xB0\x43");
    m_strings[20030] = ToUTF8(encoding, "°Ré");  改成    m_strings[20030] = ToUTF8(encoding, "\xB0\x52\xE9");
    m_strings[20031] = ToUTF8(encoding, "°Ra");  改成    m_strings[20031] = ToUTF8(encoding, "\xB0\x52\x61");
    m_strings[20032] = ToUTF8(encoding, "°Rø");  改成    m_strings[20032] = ToUTF8(encoding, "\xB0\x52\xF8");
    m_strings[20033] = ToUTF8(encoding, "°De");  改成    m_strings[20033] = ToUTF8(encoding, "\xB0\x44\x65");
    m_strings[20034] = ToUTF8(encoding, "°N");   改成    m_strings[20034] = ToUTF8(encoding, "\xB0\x4E");



    /lib/fribidi/fribidi_char_sets_cp1255.c
    /lib/fribidi/fribidi_char_sets_cp1256.c
    /lib/fribidi/fribidi_char_sets_isiri_3342.c
    /lib/fribidi/fribidi_char_sets_iso8859_6.c
    /lib/fribidi/fribidi_char_sets_iso8859_8.c

    这几个文件里导致错误的都是一句,可作如下修改:
    return '¿';   改成   return '\xBF';

    /xbmc/lib/libhttpapi/XBMChttp.cpp
    大约在 Line2780-2786 之间改成:

        if(strInfo.Find("\xEF\xBF\xBD") && strInfo.Find("\xEF\xBF\xBD"))
        {
          // The Charset Converter ToUtf8() will add. only in this case= "\xEF\xBF\xBD" a char "\xC2\xB0" during converting, 
          // which is the right value for the GUI!
          // A length depending fix in CCharsetConverter::stringCharsetToUtf8() will couse a wrong char in GUI. 
          // So just for http, we remove the "\xEF\xBF\xBD", to fix BUG ID:[1586251]
          strInfo.Replace("\xEF\xBF\xBD","");
        }


    另外还有一些文件,非ascii字符都在代码注释里,中文区域下编译会产生warning C4819,不需要修改

    /lib/libiconv/include/iconv.h
    /xbmc/lib/libscrobbler/errors.h
    /xbmc/lib/libapetag/apetaglib.c
    /xbmc/lib/libUPnP/Neptune/Source/Core/NptXml.cpp
    /xbmc/lib/cximage-6.0/cximage/ximadsp.cpp
    /xbmc/cores/paplayer/YMCodec/StSoundLibrary/YmMusic.cpp
    /xbmc/cores/paplayer/YMCodec/StSoundLibrary/Ymload.cpp
    /xbmc/cores/paplayer/vgmstream/src/meta/ps2_mib.c
    /xbmc/cores/paplayer/SIDCodec/libsidplay/src/reloc65.c
    /xbmc/cores/dvdplayer/codecs/libfaad2/libfaad/syntax.c
    /xbmc/cores/dvdplayer/codecs/libfaad2/libfaad/mdct.c
    /xbmc/cores/dvdplayer/dvdcodecs/dvdcodecutils.cpp
    /xbmc/utils/RssReader.cpp
    /xbmc/utils/teletext.cpp



    作以上更改后,就可以在中文区域下正确编译了,不用再把操作系统切换到英文区域下了。
    希望斑竹们最好能提交到官方版本,这样以后在中文系统下更新编译就方便了。

    http://bbs.htpc1.com/viewthread.php?tid=107638

  • 相关阅读:
    cross-domain
    【转】React、Vue访问NotFound
    Flutter环境配置
    antd遇见的坑
    npm源设置
    React中的生命周期函数
    【备忘】javascript原型、Function、eval、闭包、json处理、类、arguments不定
    ADB获取手机信息
    selenium操作
    操作execl
  • 原文地址:https://www.cnblogs.com/logitechlike/p/2875696.html
Copyright © 2011-2022 走看看