html_url,issue_url,id,node_id,user,created_at,updated_at,author_association,body,reactions,performed_via_github_app,issue https://github.com/pydata/xarray/issues/1193#issuecomment-270737056,https://api.github.com/repos/pydata/xarray/issues/1193,270737056,MDEyOklzc3VlQ29tbWVudDI3MDczNzA1Ng==,6645714,2017-01-05T19:38:47Z,2017-01-05T20:01:34Z,CONTRIBUTOR,"I found that changing char_to_string resulted in dropping the 0 length dimension: before: ``` Dimensions: (dim0: 1, dim1: 0) Coordinates: * dim0 (dim0) int64 0 * dim1 (dim1) int64 Data variables: x (dim0, dim1) |S1 ``` after: ``` Dimensions: (dim0: 1) Coordinates: * dim0 (dim0) int64 0 Data variables: x (dim0) |S1 ``` So, instead I modified conventions.decode_cf_variable to not wrap character arrays with a terminal zero length dimension as CharToStringArray: ``` if concat_characters: if data.dtype.kind == 'S' and data.dtype.itemsize == 1 and data.shape[-1] != 0: dimensions = dimensions[:-1] data = CharToStringArray(data) ``` And this appears to round-trip correctly. EDIT: fixed output when modifying char_to_string","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,199032440