diff --git a/dask/dataframe/io/csv.py b/dask/dataframe/io/csv.py
--- a/dask/dataframe/io/csv.py
+++ b/dask/dataframe/io/csv.py
@@ -484,6 +484,15 @@ def read_pandas(
         kwargs["lineterminator"] = lineterminator
     else:
         lineterminator = "\n"
+    if "encoding" in kwargs:
+        b_lineterminator = lineterminator.encode(kwargs["encoding"])
+        empty_blob = "".encode(kwargs["encoding"])
+        if empty_blob:
+            # This encoding starts with a Byte Order Mark (BOM), so strip that from the
+            # start of the line terminator, since this value is not a full file.
+            b_lineterminator = b_lineterminator[len(empty_blob) :]
+    else:
+        b_lineterminator = lineterminator.encode()
     if include_path_column and isinstance(include_path_column, bool):
         include_path_column = "path"
     if "index" in kwargs or (
@@ -559,7 +568,6 @@ def read_pandas(
             "Setting ``sample=blocksize``"
         )
         sample = blocksize
-    b_lineterminator = lineterminator.encode()
     b_out = read_bytes(
         urlpath,
         delimiter=b_lineterminator,

It looks like @TomAugspurger started looking into what was going on in #5787, so that is probably to path forward. Particularly this bit:

> I think somewhere in the blocksize splitting, we've split in the middle of a two byte character sequence. Indeed, I think the fact that we have an odd number of bytes.

Are you interested in picking that issue back up?
diff --git a/dask/dataframe/io/tests/test_csv.py b/dask/dataframe/io/tests/test_csv.py
--- a/dask/dataframe/io/tests/test_csv.py
+++ b/dask/dataframe/io/tests/test_csv.py
@@ -1155,17 +1155,8 @@ def test_read_csv_with_datetime_index_partitions_n():
         assert_eq(df, ddf)
 
 
-xfail_pandas_100 = pytest.mark.xfail(reason="https://github.com/dask/dask/issues/5787")
-
-
-@pytest.mark.parametrize(
-    "encoding",
-    [
-        pytest.param("utf-16", marks=xfail_pandas_100),
-        pytest.param("utf-16-le", marks=xfail_pandas_100),
-        "utf-16-be",
-    ],
-)
+# utf-8-sig and utf-16 both start with a BOM.
+@pytest.mark.parametrize("encoding", ["utf-8-sig", "utf-16", "utf-16-le", "utf-16-be"])
 def test_encoding_gh601(encoding):
     ar = pd.Series(range(0, 100))
     br = ar % 7

test_encoding_gh601[utf-16] doesn't always fail
**What happened**:

`test_encoding_gh601[utf-16]` is marked as a strict xfail. However, when building dask, it will sometimes pass. This seems to be correlated with running on s390x, a big-endian machine.

Is the problem then just that something is missing a byteswap?

**What you expected to happen**:

Tests pass, whether that means xfails always fail, or the xfail is removed.

**Anything else we need to know?**:

**Environment**:

- Dask version: 2.30.0, plus older versions
- Python version: 3.9.0
- Operating System: Fedora 33
- Install method (conda, pip, source): building from source

dask/dataframe/io/tests/test_csv.py::test_encoding_gh601[utf-16-le] dask/dataframe/io/tests/test_csv.py::test_encoding_gh601[utf-16]
dask/dataframe/io/tests/test_csv.py::test_to_csv_warns_using_scheduler_argument dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_with_header[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_none_usecols dask/dataframe/io/tests/test_csv.py::test_read_csv_skiprows_only_in_first_partition[read_table-read_table-name\tamount\nAlice\t100\nBob\t-200\nCharlie\t300\nDennis\t400\nEdith\t-500\nFrank\t600\nAlice\t200\nFrank\t-200\nBob\t600\nAlice\t400\nFrank\t200\nAlice\t300\nEdith\t600-skip1] dask/dataframe/io/tests/test_csv.py::test_read_csv_slash_r dask/dataframe/io/tests/test_csv.py::test_to_single_csv_gzip dask/dataframe/io/tests/test_csv.py::test_to_csv_multiple_files_cornercases dask/dataframe/io/tests/test_csv.py::test_to_csv_header[False-False-a,1\n-d,4\n] dask/dataframe/io/tests/test_csv.py::test_read_csv_large_skiprows[read_csv-read_csv-name,amount\nAlice,100\nBob,-200\nCharlie,300\nDennis,400\nEdith,-500\nFrank,600\nAlice,200\nFrank,-200\nBob,600\nAlice,400\nFrank,200\nAlice,300\nEdith,600-7] dask/dataframe/io/tests/test_csv.py::test_auto_blocksize dask/dataframe/io/tests/test_csv.py::test_names_with_header_0[True] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_enforce_dtypes[read_csv-blocks0] dask/dataframe/io/tests/test_csv.py::test_robust_column_mismatch dask/dataframe/io/tests/test_csv.py::test_enforce_dtypes[read_table-blocks1] dask/dataframe/io/tests/test_csv.py::test_names_with_header_0[False] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[zip-None] dask/dataframe/io/tests/test_csv.py::test_csv_getitem_column_order dask/dataframe/io/tests/test_csv.py::test_skiprows_as_list[read_csv-read_csv-files0-str, dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_csv_parse_fail dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[None0-10] dask/dataframe/io/tests/test_csv.py::test_read_csv[read_table-read_table-name dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_with_header[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_as_str[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_with_duplicate_name[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_comment[read_csv-read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_empty_csv_file dask/dataframe/io/tests/test_csv.py::test_to_csv dask/dataframe/io/tests/test_csv.py::test_read_csv_files[read_csv-read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_to_csv_line_ending dask/dataframe/io/tests/test_csv.py::test_skiprows[read_table-read_table-files1] dask/dataframe/io/tests/test_csv.py::test_auto_blocksize_max64mb dask/dataframe/io/tests/test_csv.py::test_read_csv[read_csv-read_csv-name,amount\nAlice,100\nBob,-200\nCharlie,300\nDennis,400\nEdith,-500\nFrank,600\nAlice,200\nFrank,-200\nBob,600\nAlice,400\nFrank,200\nAlice,300\nEdith,600-,] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_dtype_coercion[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_header_int[1] dask/dataframe/io/tests/test_csv.py::test_to_csv_with_get dask/dataframe/io/tests/test_csv.py::test_skipfooter[read_csv-read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_simple[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_read_csv_files_list[read_table-read_table-files1] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[gzip-10] dask/dataframe/io/tests/test_csv.py::test_header_int[2] dask/dataframe/io/tests/test_csv.py::test_to_csv_header[True-True-x,y\n-d,4\n] dask/dataframe/io/tests/test_csv.py::test_different_columns_are_allowed dask/dataframe/io/tests/test_csv.py::test_enforce_columns[read_table-blocks1] dask/dataframe/io/tests/test_csv.py::test_to_csv_header[header4-False-aa,bb\n-aa,bb\n] dask/dataframe/io/tests/test_csv.py::test_error_if_sample_is_too_small dask/dataframe/io/tests/test_csv.py::test_read_csv_singleton_dtype dask/dataframe/io/tests/test_csv.py::test__infer_block_size dask/dataframe/io/tests/test_csv.py::test_to_csv_header_empty_dataframe[True-x,y\n] dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_blocked[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_skiprows[read_csv-read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_windows_line_terminator dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_blocked[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_read_csv_sensitive_to_enforce dask/dataframe/io/tests/test_csv.py::test_head_partial_line_fix dask/dataframe/io/tests/test_csv.py::test_read_csv_names_not_none dask/dataframe/io/tests/test_csv.py::test_to_csv_errors_using_multiple_scheduler_args dask/dataframe/io/tests/test_csv.py::test_string_blocksize dask/dataframe/io/tests/test_csv.py::test_categorical_dtypes dask/dataframe/io/tests/test_csv.py::test_auto_blocksize_csv dask/dataframe/io/tests/test_csv.py::test_categorical_known dask/dataframe/io/tests/test_csv.py::test_read_csv_groupby_get_group dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_kwargs[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_csv_name_should_be_different_even_if_head_is_same dask/dataframe/io/tests/test_csv.py::test_assume_missing dask/dataframe/io/tests/test_csv.py::test_to_csv_header[True-False-x,y\n-x,y\n] dask/dataframe/io/tests/test_csv.py::test_read_csv_with_datetime_index_partitions_n dask/dataframe/io/tests/test_csv.py::test_block_mask[block_lists1] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[bz2-10] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[gzip-None] dask/dataframe/io/tests/test_csv.py::test_to_csv_paths dask/dataframe/io/tests/test_csv.py::test_index_col dask/dataframe/io/tests/test_csv.py::test_to_csv_nodir dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[zip-10] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_as_str[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_dtype_coercion[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_kwargs[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_comment[read_table-read_table-files1] dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_blocked[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_read_csv_sep dask/dataframe/io/tests/test_csv.py::test_getitem_optimization_after_filter dask/dataframe/io/tests/test_csv.py::test_to_csv_with_single_file_and_append_mode dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_kwargs[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_csv_with_integer_names dask/dataframe/io/tests/test_csv.py::test_read_csv_with_datetime_index_partitions_one dask/dataframe/io/tests/test_csv.py::test_block_mask[block_lists0] dask/dataframe/io/tests/test_csv.py::test_read_csv_has_different_names_based_on_blocksize dask/dataframe/io/tests/test_csv.py::test_read_csv_no_sample dask/dataframe/io/tests/test_csv.py::test_pandas_read_text[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_usecols dask/dataframe/io/tests/test_csv.py::test_read_csv_large_skiprows[read_table-read_table-name\tamount\nAlice\t100\nBob\t-200\nCharlie\t300\nDennis\t400\nEdith\t-500\nFrank\t600\nAlice\t200\nFrank\t-200\nBob\t600\nAlice\t400\nFrank\t200\nAlice\t300\nEdith\t600-skip1] dask/dataframe/io/tests/test_csv.py::test_reading_empty_csv_files_with_path dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_simple[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_to_csv_header_empty_dataframe[False-] dask/dataframe/io/tests/test_csv.py::test_header_int[3] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_is_dtype_category[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_read_csv_raises_on_no_files dask/dataframe/io/tests/test_csv.py::test_read_csv[read_table-read_table-name\tamount\nAlice\t100\nBob\t-200\nCharlie\t300\nDennis\t400\nEdith\t-500\nFrank\t600\nAlice\t200\nFrank\t-200\nBob\t600\nAlice\t400\nFrank\t200\nAlice\t300\nEdith\t600-\t] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_with_multiple_partitions_per_file[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_encoding_gh601[utf-8-sig] dask/dataframe/io/tests/test_csv.py::test_header_None dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[bz2-None] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_with_duplicate_name[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_select_with_include_path_column dask/dataframe/io/tests/test_csv.py::test_to_csv_simple dask/dataframe/io/tests/test_csv.py::test_read_csv_files[read_table-read_table-files1] dask/dataframe/io/tests/test_csv.py::test_parse_dates_multi_column dask/dataframe/io/tests/test_csv.py::test_to_csv_with_single_file_and_exclusive_mode dask/dataframe/io/tests/test_csv.py::test_skipinitialspace dask/dataframe/io/tests/test_csv.py::test_skiprows_as_list[read_table-read_table-files1-str\t dask/dataframe/io/tests/test_csv.py::test_multiple_read_csv_has_deterministic_name dask/dataframe/io/tests/test_csv.py::test_to_csv_single_file_exlusive_mode_no_overwrite dask/dataframe/io/tests/test_csv.py::test_to_single_csv_with_name_function dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[None1-10] dask/dataframe/io/tests/test_csv.py::test_read_csv_has_deterministic_name dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_kwargs[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_to_csv_header[header5-True-aa,bb\n-d,4\n] dask/dataframe/io/tests/test_csv.py::test_read_csv_header_issue_823 dask/dataframe/io/tests/test_csv.py::test_to_single_csv_with_header_first_partition_only dask/dataframe/io/tests/test_csv.py::test_block_mask[block_lists2] dask/dataframe/io/tests/test_csv.py::test_encoding_gh601[utf-16-be] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_with_header[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_read_csv_files_list[read_csv-read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_block_mask[block_lists3] dask/dataframe/io/tests/test_csv.py::test_to_csv_series dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_dtype_coercion[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_is_dtype_category[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_skipfooter[read_table-read_table-files1] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[None1-None] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[xz-None] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text_kwargs[read_csv-files0] dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_kwargs[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_late_dtypes dask/dataframe/io/tests/test_csv.py::test_to_single_csv dask/dataframe/io/tests/test_csv.py::test_read_csv_skiprows_only_in_first_partition[read_csv-read_csv-name,amount\nAlice,100\nBob,-200\nCharlie,300\nDennis,400\nEdith,-500\nFrank,600\nAlice,200\nFrank,-200\nBob,600\nAlice,400\nFrank,200\nAlice,300\nEdith,600-7] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[None0-None] dask/dataframe/io/tests/test_csv.py::test_read_csv_arrow_engine dask/dataframe/io/tests/test_csv.py::test_read_csv_skiprows_range dask/dataframe/io/tests/test_csv.py::test_consistent_dtypes_2 dask/dataframe/io/tests/test_csv.py::test_read_csv_include_path_column_with_multiple_partitions_per_file[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_to_csv_keeps_all_non_scheduler_compute_kwargs dask/dataframe/io/tests/test_csv.py::test_read_csv_index dask/dataframe/io/tests/test_csv.py::test_text_blocks_to_pandas_simple[read_table-files1] dask/dataframe/io/tests/test_csv.py::test_read_csv_compression[xz-10] dask/dataframe/io/tests/test_csv.py::test_pandas_read_text[read_fwf-files2] dask/dataframe/io/tests/test_csv.py::test_to_csv_header[False-True-a,1\n-d,4\n] dask/dataframe/io/tests/test_csv.py::test_consistent_dtypes dask/dataframe/io/tests/test_csv.py::test_enforce_columns[read_csv-blocks0]