False

Quoting my recent answer on NG:
```
Okay, here you go - an UTF-8 table of cased sin

Codepoints upper-case - lower-case - UTF codeunits
0x01e9e : 0x000df - 3 : 2
0x0023a : 0x02c65 - 2 : 3
0x0023e : 0x02c66 - 2 : 3
0x02c7e : 0x0023f - 3 : 2
0x02c7f : 0x00240 - 3 : 2
0x02c6f : 0x00250 - 3 : 2
0x02c6d : 0x00251 - 3 : 2
0x02c70 : 0x00252 - 3 : 2
0x0a78d : 0x00265 - 3 : 2
0x0a7aa : 0x00266 - 3 : 2
0x02c62 : 0x0026b - 3 : 2
0x02c6e : 0x00271 - 3 : 2
0x02c64 : 0x0027d - 3 : 2
0x01e9e : 0x000df - 3 : 2
0x02c62 : 0x0026b - 3 : 2
0x02c64 : 0x0027d - 3 : 2
0x0023a : 0x02c65 - 2 : 3
0x0023e : 0x02c66 - 2 : 3
0x02c6d : 0x00251 - 3 : 2
0x02c6e : 0x00271 - 3 : 2
0x02c6f : 0x00250 - 3 : 2
0x02c70 : 0x00252 - 3 : 2
0x02c7e : 0x0023f - 3 : 2
0x02c7f : 0x00240 - 3 : 2
0x0a78d : 0x00265 - 3 : 2
0x0a7aa : 0x00266 - 3 : 2

And this is only with 1:1 mapping.

Generated by new and shiny std.uni:

void main(){
    import std.uni, std.utf, std.stdio;
    char buf[4];
    foreach(dchar ch; unicode.Cased_Letter.byCodepoint){
        dchar upper = toUpper(ch);
        dchar lower = toLower(ch);

        int uLen = encode(buf, upper);
        int lLen = encode(buf, lower);
        if(uLen != lLen)
            writefln("0x%05x : 0x%05x - %d : %d", upper, lower, uLen, lLen);
    }
} 
```