将csv文件处理为UTF-8

Trying to figure out how to process a csv file with UTF encoding. Tried multiple ways like adding this utf8_encode() and with this in the header:

header('Content-Type: text/html; charset=UTF-8');

But nothing seems to work.

The code is:

<?php
include 'head.php';
$csv = array_map("str_getcsv", file("translations/dk.csv"));
foreach ($csv as $line){
     $translate["dk"][ $line[0] ] = $line[1];
}if ($line[1] != NULL){
    $line[0] = $line[1];
}
echo $line[0];
fclose($csv);
?>

How to I echo the output with UTF-8 encoding?

When you would display it in a browser you should use valid html and set the meta charset to utf8 too:

<?php
include 'head.php';
?>
<!DOCTYPE html>
<html lang="dk">
<head>
    <meta charset="utf-8"/>
</head>
<body>
<?php

$csv = array_map("str_getcsv", file("translations/dk.csv"));
foreach ($csv as $line){
     $translate["dk"][ $line[0] ] = $line[1];
}if ($line[1] != NULL){
    $line[0] = $line[1];
}
echo $line[0];
fclose($csv);
?>
</body>
</html>

Or using text/plain instead of text/html can help:

header('Content-Type: text/plain; charset=UTF-8');

Hope that helps.

Based on what you described it looks like the file isn't in UTF-8 format, its probably in ISO-8859-1 but you are trying to display as if it was in UTF-8, hence why you see strange blocky symbols.

You have two options, you can convert the file entries to UTF-8 with:

foreach ($csv as $line)
    $translate["dk"][$line[0]] = utf8_encode($line[1]);

Or declare the file real encoding to the browser so it will display correctly:

header('Content-Type: text/html; charset=ISO-8859-1');

Since W3C recommends UTF-8 as default encoding for web, the first option should be prefered.

Alternatively, you can convert the entire file to UTF-8 using your favorite text editor and save it that way, so you don't have to convert it to UTF-8 every time.