diff --git a/metadata/metadata.go b/metadata/metadata.go
index adebc38..9e39b1a 100644
--- a/metadata/metadata.go
+++ b/metadata/metadata.go
@@ -61,12 +61,12 @@
 // Transmitting binary headers violates HTTP/2 spec.
 // TODO(zhaoq): Maybe check if k is ASCII also.
 func encodeKeyValue(k, v string) (string, string) {
-	if isASCII(v) {
-		return k, v
+	k = strings.ToLower(k)
+	if strings.HasSuffix(k, binHdrSuffix) {
+		val := base64.StdEncoding.EncodeToString([]byte(v))
+		v = string(val)
 	}
-	key := strings.ToLower(k + binHdrSuffix)
-	val := base64.StdEncoding.EncodeToString([]byte(v))
-	return key, string(val)
+	return k, v
 }
 
 // DecodeKeyValue returns the original key and value corresponding to the
@@ -75,12 +75,11 @@
 	if !strings.HasSuffix(k, binHdrSuffix) {
 		return k, v, nil
 	}
-	key := k[:len(k)-len(binHdrSuffix)]
 	val, err := base64.StdEncoding.DecodeString(v)
 	if err != nil {
 		return "", "", err
 	}
-	return key, string(val), nil
+	return k, string(val), nil
 }
 
 // MD is a mapping from metadata keys to values. Users should use the following
diff --git a/metadata/metadata_test.go b/metadata/metadata_test.go
index ef3a1b8..ad783d2 100644
--- a/metadata/metadata_test.go
+++ b/metadata/metadata_test.go
@@ -40,6 +40,27 @@
 
 const binaryValue = string(128)
 
+func TestEncodeKeyValue(t *testing.T) {
+	for _, test := range []struct {
+		// input
+		kin string
+		vin string
+		// output
+		kout string
+		vout string
+	}{
+		{"key", "abc", "key", "abc"},
+		{"KEY", "abc", "key", "abc"},
+		{"key-bin", "abc", "key-bin", "YWJj"},
+		{"key-bin", binaryValue, "key-bin", "woA="},
+	} {
+		k, v := encodeKeyValue(test.kin, test.vin)
+		if k != test.kout || !reflect.DeepEqual(v, test.vout) {
+			t.Fatalf("encodeKeyValue(%q, %q) = %q, %q, want %q, %q", test.kin, test.vin, k, v, test.kout, test.vout)
+		}
+	}
+}
+
 func TestDecodeKeyValue(t *testing.T) {
 	for _, test := range []struct {
 		// input
@@ -51,8 +72,8 @@
 		err  error
 	}{
 		{"a", "abc", "a", "abc", nil},
-		{"key-bin", "Zm9vAGJhcg==", "key", "foo\x00bar", nil},
-		{"key-bin", "woA=", "key", binaryValue, nil},
+		{"key-bin", "Zm9vAGJhcg==", "key-bin", "foo\x00bar", nil},
+		{"key-bin", "woA=", "key-bin", binaryValue, nil},
 	} {
 		k, v, err := DecodeKeyValue(test.kin, test.vin)
 		if k != test.kout || !reflect.DeepEqual(v, test.vout) || !reflect.DeepEqual(err, test.err) {
@@ -69,9 +90,9 @@
 		md MD
 	}{
 		{[]string{}, MD{}},
-		{[]string{"k1", "v1", "k2", binaryValue}, New(map[string]string{
+		{[]string{"k1", "v1", "k2-bin", binaryValue}, New(map[string]string{
 			"k1":     "v1",
-			"k2-bin": "woA=",
+			"k2-bin": binaryValue,
 		})},
 	} {
 		md := Pairs(test.kv...)
