Boost logo

Boost Users :

From: bthiesfield (bthiesfield_at_[hidden])
Date: 2002-06-24 03:39:44


Hi all,

I am currently trying to use the boost regex library with Japanese
language strings. It appears like DBCS is not supported. For
example, using the following code (with compile definition of
BOOST_REGEX_USE_C_LOCALE) I get the output strings as

0 = "$B!#(B"
1 = "English"

Instead of the expected:

0 = "$B$d$f$h$o$r!<!#(B"
1 = "English"

This is due to the fact that the Japanese (SJIS encoding) for one of
these characters uses the [ character as one of the characters in the
encoding.

    setlocale( LC_COLLATE, "Japanese" );
    setlocale( LC_CTYPE, "Japanese" );

    char * pszText = "$B$d$f$h$o$r!<!#(B [english]",
    char * pszRule ="([^\\[]*)\\[([[:word:]]*)\\]";

    // split the string into it's components
    std::vector<std::string> vPart;
    boost::regex eParseExpr( pszRule,
        boost::regbase::normal | boost::regbase::icase );
    boost::regex_split( std::back_inserter(vPart),
std::string(pszText), eParseExpr );

Is there some what to modify the library to enable DBCS? For
example, can the char_traits be modified to enable DBCS processing?
(Keeping in mind that the biggest problem with DBCS is that a single
character may consist of 2 bytes which tends to blow out all
assumptions about the size of characters).

Brodie.


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net