>Is this correct? char is unsigned in D.

I think, yes.
`char` is a type which represents a abstract character, not number, primarily. Thus, singned/unsigned attribute make sense only inside translation unit. (usually)
 `char` is used in most cases when we need a variable representing the character. 
BTW: http://dlang.org/interfaceToC.html says that C (C++) `char` should be mapped to D `char`.