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/4822#issuecomment-1081745934,https://api.github.com/repos/pydata/xarray/issues/4822,1081745934,IC_kwDOAMm_X85AeiIO,5821660,2022-03-29T11:20:44Z,2022-03-29T11:20:44Z,MEMBER,@yt87 This works for me with latest `h5netcdf` version. There have been several fixes regarding attribute reading. The issue might be closed after confirming.,"{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,787947436
https://github.com/pydata/xarray/issues/4822#issuecomment-762725640,https://api.github.com/repos/pydata/xarray/issues/4822,762725640,MDEyOklzc3VlQ29tbWVudDc2MjcyNTY0MA==,5821660,2021-01-19T09:43:53Z,2021-01-19T09:43:53Z,MEMBER,"Possibly related issue: https://github.com/h5netcdf/h5netcdf/issues/27

Anyway, I think I've found the root-cause of the issue. So with netcdf4-python it is possible to specify writing of attributes as `NC_STRING` string attributes.

The following will create a netcdf file which is readable with current xarray and `h5netcdf` backend.

```python
import netCDF4 as nc
import xarray as xr
rootgrp = nc.Dataset(""test_nc4_attrs.nc"", mode=""w"", format=""NETCDF4"")
# rootgrp.set_ncstring_attrs(True)
x = rootgrp.createDimension(""x"", 1)
y = rootgrp.createDimension(""y"", 1)
foo = rootgrp.createVariable(""foo"", ""i4"", (""y"", ""x""))
foo.coordinates = ""y x""
foo[0, 0] = 0
rootgrp.close()
ds = xr.open_dataset(""test_nc4_attrs.nc"", engine=""h5netcdf"")
print(ds)
print(ds.foo)
ds.close()
```

If you uncomment the one line, this creates netcdf file which breaks with the error @yt87 showed above. If you try to open the file with `decode_cf=False` and write it back using `to_netcdf` the same error occurs. 

h5dump before uncomment
```
 ATTRIBUTE ""coordinates"" {
         DATATYPE  H5T_STRING {
            STRSIZE 3;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_ASCII;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SCALAR
         DATA {
         (0): ""y x""
         }
      }
```

h5dump after uncomment
```
ATTRIBUTE ""coordinates"" {
         DATATYPE  H5T_STRING {
            STRSIZE H5T_VARIABLE;
            STRPAD H5T_STR_NULLTERM;
            CSET H5T_CSET_UTF8;
            CTYPE H5T_C_S1;
         }
         DATASPACE  SIMPLE { ( 1 ) / ( 1 ) }
         DATA {
         (0): ""y x""
         }
      }
```

Another thing I found, that this only accounts for `coordinate` attributes. All other attributes are read correctly AFAIKT. So with this in mind I would consider that a bug. The assumption that attributes are always scalar doesn't hold true. 

And one more thing, also roundtripping in netcdf4 does not keep the NC_STRING type:

```python
import netCDF4 as nc
import xarray as xr
rootgrp = nc.Dataset(""test_nc4_attrs.nc"", mode=""w"", format=""NETCDF4"")
rootgrp.set_ncstring_attrs(True)
x = rootgrp.createDimension(""x"", 1)
y = rootgrp.createDimension(""y"", 1)
foo = rootgrp.createVariable(""foo"", ""i4"", (""y"", ""x""))
rootgrp.coordinates = ""z y x""
foo.coordinates = ""y x""
foo[0, 0] = 0
rootgrp.close()

ds = xr.open_dataset(""test_nc4_attrs.nc"", engine=""netcdf4"")
ds.to_netcdf(""test_nc4_attrs_out.nc"")
ds.close()
```

```
ncdump test_nc4_attrs.nc

netcdf test_nc4_attrs {
dimensions:
	x = 1 ;
	y = 1 ;
variables:
	int foo(y, x) ;
		string foo:coordinates = ""y x"" ;

// global attributes:
		string :coordinates = ""z y x"" ;
data:

 foo =
  0 ;
}
```

```
ncdump test_nc4_attrs_out.nc

netcdf test_nc4_attrs_out {
dimensions:
	y = 1 ;
	x = 1 ;
variables:
	int foo(y, x) ;
		foo:coordinates = ""y x"" ;
data:

 foo =
  0 ;
}
```

So changes are needed in several places to check if the attribute is scalar or array, not only for `coordinates` attributes. Thoughts?



","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,787947436
https://github.com/pydata/xarray/issues/4822#issuecomment-762429899,https://api.github.com/repos/pydata/xarray/issues/4822,762429899,MDEyOklzc3VlQ29tbWVudDc2MjQyOTg5OQ==,5821660,2021-01-18T19:18:22Z,2021-01-18T19:18:22Z,MEMBER,"@yt87 Thanks for providing all this.

Could you please give `-k 'nc4'` as option to the call to ncgen and report back? I think this is a problem with data model. ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,787947436
https://github.com/pydata/xarray/issues/4822#issuecomment-762400927,https://api.github.com/repos/pydata/xarray/issues/4822,762400927,MDEyOklzc3VlQ29tbWVudDc2MjQwMDkyNw==,5821660,2021-01-18T18:07:27Z,2021-01-18T18:07:27Z,MEMBER,"If you want a quick fix to read the file, add kwarg `decode_cf=False` in `open_dataset`. Then fix the coordinate attribute and call `xr.decode_cf(ds)`.","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,787947436
https://github.com/pydata/xarray/issues/4822#issuecomment-762396972,https://api.github.com/repos/pydata/xarray/issues/4822,762396972,MDEyOklzc3VlQ29tbWVudDc2MjM5Njk3Mg==,5821660,2021-01-18T17:58:07Z,2021-01-18T17:58:07Z,MEMBER,"Hmm, this worked in my case. How exactly did you create the netcdf file? ","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,787947436
https://github.com/pydata/xarray/issues/4822#issuecomment-762258597,https://api.github.com/repos/pydata/xarray/issues/4822,762258597,MDEyOklzc3VlQ29tbWVudDc2MjI1ODU5Nw==,5821660,2021-01-18T13:42:20Z,2021-01-18T13:42:20Z,MEMBER,"@yt87 AFAIK the CDL doesn't declare attribute types specifically. This should work:

```
netcdf x {
dimensions:
	x = 1 ;
	y = 1 ;
variables:
	int foo(y, x) ;
		foo:coordinates = ""x y"" ;
data:

 foo =
  0 ;
}
```","{""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,787947436